解决vue-router4缓存页与不缓存页切换失效的问题

本文介绍如何使用Vue-router4实现组件缓存,通过监听路由变化并利用keep-alive的include属性来控制组件缓存,确保了从缓存页面切换后再返回仍保持原有状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue-router4缓存组件的新写法:

问题 

根据参考的示例,一开始我是这样写的(问题代码)

    <router-view v-slot="{ Component }">
      <keep-alive v-if="$route.meta.keepAlive">
        <component :is="Component" />
      </keep-alive>
      <component :is="Component" v-if="!$route.meta.keepAlive" />
    </router-view>

这样会存在一个问题,当从缓存页切到不缓存页,再从不缓存页返回到缓存页时,缓存失效,缓存页会重新加载。

解决

还是按照官方的方法来吧,使用include属性。

 将代码修改成:

<script setup>
import { ref, watch } from 'vue' 
import { useRoute } from 'vue-router'

const route = useRoute()

// 缓存的页面
const cachedViews = ref([])

// 监听路由改变
watch(
  () => route.path,
  () => {
    // 缓存页面
    if(route.meta.keepAlive && cachedViews.value.indexOf(route.name) == -1) {
      cachedViews.value.push(route.name)
    }
  }
)

</script>

<template>

  <!-- 页面内容 -->
    <router-view v-slot="{ Component }">
      <keep-alive :include="cachedViews">
        <component :is="Component" />
      </keep-alive>
    </router-view>

</template>

    

在路由配置中,name唯一且要和组件名称相同,否则缓存无效。keepAlive用于说明该组件是否缓存。 

     {
        path: '/home', 
        name: 'Home', // 用于缓存页面
        component: () => import('@/views/Home/Home.vue'), 
        meta: {
          keepAlive: true, // 是否缓存
        }
      },

问题解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值