vue keep-alive动态清除缓存

弄了将近一小天终于可以了。。。。以此记录

场景描述:有 A>B>C 三个层级的页面 ,A>B B刷新页面,B>C C刷新页面, C>B B不刷新页面,走缓存

原来是这么做的:

路由定义

const routes =[
    {
        name:'a'
        path:'/A',
        component:()=>import('@/pages/A'),
        meta:{
            title:'A页面'
        }
    },
     {
        name:'b',
        path:'/B',
        component:()=>import('@/pages/B'),
        meta:{
            title:'B页面',
            keepAlive:true //主角是 B 页面,这句要加上
        }
    },
     {
        name:'c', //判断跳转时使用,需要加
        path:'/C',
        component:()=>import('@/pages/C'),
        meta:{
            title:'C页面'
        }
    }
]

添加钩子函数:

  //A>B>C  A>B刷新 C>B不刷新
  beforeRouteLeave(to, from, next) {
    if (to.name === 'c') {
      from.meta.keepAlive = true;
    } else {
      from.meta.keepAlive = false;
    }
    next();//不可缺少
  },

结果:第一次 A1>B1 B1刷新  B1>C1 C1刷新正常  C1>B1 B1不刷新  用缓存   第一次全部正确

但是但第二次走的时候A2>B2  B2刷新  正常 B2>C2 C2刷新也正常  但当C2返回B2时  竟然变成了B1 B2并没有缓存 

B页面只缓存了B1 B2没有缓存上  

修改代码:

beforeRouteLeave(to,from,next){
      if(to.name ==='c'){
          from.meta.keepAlive=true;
          
      }else if(to.name ==='a'){
          //动态清楚缓存
          var key = this.$vnode.key == null
              ? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '')
              : this.$vnode.key;
          var cache = this.$vnode.parent.componentInstance.cache;
          var keys  = this.$vnode.parent.componentInstance.keys;
          if (cache[key])
          {
              if (keys.length) {
                  var index = keys.indexOf(key);
                  if (index > -1) {
                      keys.splice(index, 1);
                  }
              }
              delete cache[key];
          }
      }

      next()
  },

 完美解决   仅作个人参考    

本文参考:https://juejin.im/post/5b610da4e51d45195c07720d       十分感谢!!!

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值