Vue keep-alive总结

2019-10-31  本文已影响0人  Coldhands

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

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

prop:
常见用法
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的路由
{
    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
上一篇 下一篇

猜你喜欢

热点阅读