vue keep-alive缓存的使用及遇到的问题

关于vue keep-alive缓存的使用

官网介绍地址:https://cn.vuejs.org/v2/api/#keep-alive

 

一般使用

通常我们使用keep-alive 缓存页面的方式是

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

 

{
  path: '/report1',
  name: 'report1',
  component: report1,
  meta: {
    keepAlive: true // 需要被缓存
  }
},

 

我们在路由的meta信息中配置keepAlive属性,然后在渲染时候根据该属性,分别用不同的router-view。第一个router-view包含在keep-view中,这样keepAlive的true的页面就会进行缓存了。如果把true置成false就是走第二个router-view,并重新实例化该组件, 当然,之前缓存过的组件还在。

 

缓存的组件会有两个生命周期activated(激活[进入缓存页面]),deactivated(停用[离开缓存组件])

因为缓存的组件并不会被销毁,再次进入页面created/mounted生命周期并不存在。

 

注意:当

遇到的问题

A是期望的页面

1.我们想从A---> B --->A 的时候缓存A页面(B返回A时A页面保存了状态);但是从A-->C--->A时不缓存(C返回A时A页面需要刷新)/ 或者B-->A某种情况下要刷新

 

解决办法,结合beforeRouteEnter/beforeRouteLeave 和activated周期使用

参考:

https://blog.csdn.net/qq_30114149/article/details/78415030?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

2.从0(首页) ---> A --->B --->A 时需要A页面保存状态(缓存);但是A返回0(首页)后,再次进入A页面的时候需要刷新,即0(首页)--->A---->0(首页)--->A刷新。我想使用$destory(),虽然清除了缓存,但是被$destory()过的组件,之后就不会缓存,keep-alive失效。

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


computed: {
  alivevue () { // 缓存组件管理
    return this.$store.state.alivevue
  }
},

 

解决办法:使用keep-alive的include/exclude属性,结合vuex。当进入A页面时,将组件的名字加入到alivevue中,离开并进入首页时去除。(include会被监听生成和清除缓存)

  • include - 字符串或正则表达式。只有名称匹配的组件会被缓存。
  • exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。

注意:include 中对应的是组件的名字name

 

其他方式,找到缓存对象,手动清空

 

参考解决方法:https://blog.csdn.net/zjh1002492540/article/details/79603584

参考解决方法:https://www.cnblogs.com/mankii/p/13746051.html

参考学习:https://www.cnblogs.com/everlose/p/12541934.html(keep-alive缓存的原理)

posted @ 2019-11-12 15:44  jmwyc  阅读(914)  评论(0)    收藏  举报