vue-router4结合keep-alive实现页面缓存

1. 官方推荐写法

<router-view v-slot="{ Component, route }">
    <keep-alive>
          <component
            :is="Component"
            :key="route.meta.usePathKey ? route.path : undefined"
          />
    </keep-alive>
</router-view>

这种是最基本的写法,但是这样会实现全部页面组件的缓存,我们该如何实现部分页面缓存呢?

2. keep-alive用法

通过查看keep-alive组件相关的文档,可以通过includeexclude属性实现指定页面的缓存
include
这里的includeexclude中的值是需要组件的 name
这里的name值是需要组件文件具名导出的,

当然如果采用<script setup>的写法,会自动生成组件的name,但这样并不直观,推荐还是通过具名导出的方式

// 可以跟setup写法同时存在
<script>
export default {
  name: 'CERTI_CHECK_LIST'
};
</script>
<script setup>
</script>

3. 与router-view结合

可以通过如下写法

<template>
  <router-view v-slot="{ Component }">
    <keep-alive :include="includeList">
      <component :is="Component" :key="$route.fullPath" />
    </keep-alive>
  </router-view>
</template>

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

const route = useRoute();
const includeList = reactive([]);
watch(route, (to) => {
  if (to.meta.keepAlive && includeList.indexOf(to.name) === -1) {
    includeList.push(to.name);
  }
});
</script>
//  route.js
 {
        path: 'list',
        name: 'CERTI_CHECK_LIST', // 保持一致
        component: () => import('@/views/certi-check/list/index.vue'),
        meta: {
          keepAlive: true
        }
  },

// @/views/certi-check/list/index.vue
<script>
export default {
  name: 'CERTI_CHECK_LIST' // 保持一致
};
</script>

这里需要注意 一点,组件的name路由的name 需要设置成一样,才能通过include缓存对应的组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值