vue项目里keepAlive、嵌套路由keepAlive的正确使用方法,以及遇到的问题

文章介绍了两种在Vue中使用keep-alive进行页面缓存的方法,推荐使用include属性配合组件名管理缓存,而不推荐使用v-if,因为后者可能导致组件渲染问题。同时,文章提到了嵌套路由时的注意事项和如何在store中控制页面缓存,以及处理新增/编辑页面时清除缓存的策略。

正确使用keepAlive

第一种方式(推荐)

 <keep-alive :include="keepAliveList">
        <router-view :key="$route.path" />
</keep-alive>

注意:组件名称和include里的一致才会缓存
使用这种方式 include 可以是数组、正则表达式、一个组件的名称
不缓存这个组件的时候,将组件名称从keeAliveList里移除就可以了

第二种方式(不推荐)

<keep-alive>
	<router-view v-if="$route.meta.keepAlive" :key="$route.path" /> 
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" :key="$route.path" /> 

需要在路由的meta信息里增加 keepAlive: true

{
    path: '/xxx/xxxxx',
    name: 'AddXXX',
    meta: {
       title: '新增XX',
       activeMenu: '/XXX',
       keepAlive: true
    },
    component: () => import('@/views/XXX.vue)
},

很多人都喜欢用第二种方式,因为vue2.0版本以上才有,所以这是一种很久之前的用法
为什么不推荐
因为v-if切换组件的时候会导致组件渲染问题,虽然可以缓存,但是切换页面可能会导致一些组件触发created、mounted里的方法,不信可以去自己试试
tips:项目需要缓存的页面少,并且数据请求时间短的可以使用这种方法,影响很小

嵌套组件的坑

嵌套组件的时候,最好App.vue里这样写

 <div id="app" ref="app">
    <router-view />
  </div>

main组件里这样写

<main>
    <keep-alive :include="keepAliveList">
     	<router-view :key="$route.path" />
    </keep-alive>
</main>

别问为什么,血的教训,因为公司框架是一些前辈写的,他们都行喜欢使用第二种写法来写,嵌套路由这样写,会导致内层组件是keepAlive的,但是外层不是,切换二级菜单就会触发内部已经缓存页面的created里的请求,不信你去试试,接手项目,遇到请求重复之类的问题,找不到解决方法,可以去看看router-view。

store里控制页面的缓存

当数据提交,或者是新增/编辑页面使用的同一个页面的时候,想要清除缓存怎么办

数组(讲数组吧,这个最好用)

直接在提交或者是关闭此页面的时候将这个组件的名称从keepAlive列表里移除,然后在进入这个页面的时候,初始化keepAliveList(重置为之前的列表),这样就又会缓存了。编辑页面就判断在离开页面的时候将这个页面的名称从keepAliveList移除

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值