美文网首页
Vue keep-alive总结

Vue keep-alive总结

作者: Coldhands | 来源:发表于2019-10-31 14:30 被阅读0次

<keep-alive></keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重新渲染DOM。

<keep-alive>包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和<transition>相似,<keep-alive>是一个抽象组件:它自身不会渲染一个DOM元素,也不会出现在父组件链中。

prop:
  • include:字符串或正则表达式。只有匹配的组件会被缓存。
  • exclude:字符串或正则表达式。任何匹配的组件都不会被缓存,其他组件都会被缓存。
常见用法
export default {
  name: 'test-keep-alive',
  data () {
    return {
      includedComponents: "test-keep-alive"
     }
  }
}
<keep-alive include="test-keep-alive">
  <!-- 将缓存name为test-keep-alive的组件 -->
  <component></component>
</keep-alive>

<keep-alive include="a,b">
  <!-- 将缓存name为a或者b的组件,结合动态组件使用 -->
  <component :is="view"></component>
</keep-alive>

<keep-alive include="/a|b/">
  <!-- 使用正则表达式,需使用v-bind -->
  <component :is="view"></component>
</keep-alive>

<keep-alive exclude="test-keep-alive">
  <!-- 将不缓存name为test-keep-alive的组件 -->
  <component></component>
</keep-alive>
结合router,缓存部分页面
使用$route.metakeepAlive属性:
<keep-alive>
  <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
需要在router中设置router的原信息meta
// router.js
export default new Router({
  routes: [{
    path: '/',
    name: 'Hello',
    component: Hello,
    meta: {
      keepAlive: true
     }
  }, {
    path: '/',
    name: 'Hello',
    component: Hello,
    meta: {
      keepAlive: true
     }
  }]
})
要求:
  • 首页是A页面
  • B页面跳转到A页面,A页面需要缓存
  • C页面跳转到A页面,A页面不需要缓存
    思路是在每个路由的beforeRouteLeave(to, from, next)钩子中设置to.meta.keepAlive
// A的路由
{
    path: '/',
    name: 'A',
    component: A,
    meta: {
        keepAlive: true // 需要被缓存
    }
}

 // B 跳转到 A 时,让 A 缓存,即不刷新
export default {
    data() {
        return {};
    },
    methods: {},
    beforeRouteLeave(to, from, next) {
         // 设置下一个路由的 meta
        to.meta.keepAlive = true;  // B 跳转到 A 时,让 A 缓存,即不刷新
        next();
    }
};

// C 跳转到 A 时让 A 不缓存,即刷新
export default {
    data() {
        return {};
    },
    methods: {},
    beforeRouteLeave(to, from, next) {
        // 设置下一个路由的 meta
        to.meta.keepAlive = false; // C 跳转到 A 时让 A 不缓存,即刷新
        next();
    }
};
keep-alive生命周期钩子函数:activateddeactivated

相关文章

网友评论

      本文标题:Vue keep-alive总结

      本文链接:https://www.haomeiwen.com/subject/wkzzvctx.html