IN THE FUTURE

人闲桂花落,满身皆是秋

  • WeChat
  • Vue使用Keep-alive之后组件缓存的手动清除

    Tokials·3 天前·0 次阅读

    问题背景:

    当使用keep-alive去缓存路由页面时(如下),如果路由导航 根据query参数不同使用了同一个组件 ,如果单纯使用 includeexclude 去移除缓存,会导致其他参数路由下页面的缓存一并移除,这并不是我们想要的

    解决思路

    方法1、使用动态 name, 根据fullPath生成包裹组件,fullPath作为name,结合include完成缓存移除

    Vue3

    
      
        
      
    
    
    
    

    Vue2

    
      
    
    
    

    方法2、手动读取Vue的缓存区,移除缓存(不建议,优先方法一)

    
        
    
    
    // 手动读取缓存区并删除
    removeCache(fullPath){
      let eleNode = this.$refs.routerEle;
      if (eleNode) {
        let componentInstance = eleNode.$vnode?.parent?.componentInstance;
        if(!componentInstance) return;
        let cacheKeys = componentInstance.keys;
        let cache = componentInstance.cache;
        let index = cacheKeys.indexOf(fullPath);
        cacheKeys.splice(index, 1);
        delete cache[fullPath];
        eleNode.$destroy();
      }
    }
    Tokials

    月亮被嚼碎了变成星星,你就藏在漫天的星光里。

    Tokials

    月亮被嚼碎了变成星星,你就藏在漫天的星光里。


    月亮被嚼碎了变成星星,你就藏在漫天的星光里。

    查看评论
      切换主题 | SCHEME TOOL