【Vue】缓存keep-alive

keep-alive缓存

如果没有缓存,每点击一次导航,内容区就会创建一个组件,该组件会经历整个生命周期,每点击一次,就会创建一个组件,比较浪费性能,这时,我们就要考虑到是否能将点击过的已创建的组件进行缓存,当再次点击已访问过的组件时,这时,就会从缓存中获取该组件,而不会重新创建,这就用到keep-alive。

//用keep-alive 标签包裹component组件标签
<keep-alive> <component :is="currentComponent"></component> </keep-alive> //在vue-router中的应用 <keep-alive :include="whiteList" :exclude="blackList" :max="amount"> <router-view></router-view> </keep-alive>

include定义缓存白名单,keep-alive会缓存命中的组件;exclude定义缓存黑名单,被命中的组件将不会被缓存;max定义缓存组件上限,超出上限使用LRU的策略置换缓存数据。

activated、deactivated

keep-alive包裹的组件有两个生命周期:activated、deactivated

activated(){
    console.log("活跃状态");
}
deactivated(){
    console.log("缓存状态")
}

用途距离:当在a组件浏览小说到某个位置,这时,我切换到b组件,那么就用a组件的缓存状态函数记录这个位置,当我再次切换到a组件,用活跃状态函数保存到该位置

include、exclude

include属性表示只有name属性满足的组件会被缓存,其它组件不会被缓存
exclude则相反

<keep-alive include="bookLists,bookLists">
      <router-view></router-view>
</keep-alive>
<keep-alive exclude="indexLists">
      <router-view></router-view>
</keep-alive>

注意:name是组件的名字,而不是路由的名字

如一个vue文件

<template>...</template>
<script>
export default {
  name:”bookLists”,
  data:(){
    return {}
  }
}
</script>

利用meta属性直接在路由文件中设置

router.js路由设置该属性

    {
      path: '/about',
      name: 'about',
      component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
      meta: {
        keepAlive: true // 需要被缓存的组件
      }
    },
    {
      path: '/vuexTry',
      component: () => import('./views/vuexTry.vue'),
      meta: {
        keepAlive: false // 不需要被缓存的组件
      }
    }
 

<keep-alive>
  <router-view v-if="this.$route.meat.keepAlive"></router-view>
  <!--这里是会被缓存的组件-->
</keep-alive>
posted @ 2019-12-20 00:18  把我当做一棵树叭  阅读(446)  评论(0)    收藏  举报