vue手动清除keep-alive中的缓存

在Vue项目中使用keep-alive进行页面缓存时,通过动态管理Vuex中的cachedViews来控制缓存。打开和关闭标签页时,分别将组件名添加和移除该数组。然而,若多个页面共用同一组件,直接根据组件名删除会导致所有实例被清除。为精确删除特定页面的缓存,需要深入Vue源码,找到名为sess的缓存实例并删除,以实现针对性的缓存清除。
摘要由CSDN通过智能技术生成

当我们在项目中使用tagView切换拦的时候,意味着我们需要缓存出现的页面
在这里插入图片描述

利用keep-alive的include,新打开标签时,把当前组件名加入到include数组里,关闭标签时从数组中删除关闭标签的组件名就可以了

首先,keep-alive组件的include是可以绑定匹配名字的组件,匹配的组件将会被缓存,所以我们可以动态的在vuex里面绑定一个缓存。
在这里插入图片描述
打开的vue调试工具窗口查看vuex里面的值,这里我使用cachedViews去存储vue需要缓存的组件,这个值是组件的name值而不是路由name的值,所以后面会引出一个问题。
在这里插入图片描述
所以点击删除的时候把对应的名字从include里面删除,vue的keep-alive组件内部自动会把对应的组件缓存删掉。

  DEL_CACHED_VIEW: (state, view) => {
   
    const index = state.cachedViews.indexOf(view.name);
    index > -1 && state.cachedViews.splice(index, 1);
  },
  
  // 直接从cachedViews删掉就是,included绑定就是cachedViews,删掉后keep-alive就会自动删除缓存

但是如果有另外一种情况:不同的页面使用的是同一个组件,如果还是按照上面的逻辑去删除,就会导致删除一个页面的时候把所有使用该组件的页面的缓存给删除。
在这里插入图片描述
这样肯定不是我们想要的。所以我们需要删除点击的那个组件实例去删除,很遗憾官网没有提供直接删除某一个组件实例的方法。

所以只有从keep-alive存储缓存的源码出手,把组件的实例删除掉。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值