vue的keep-alive中,使用include和exclude优先级

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue的keep-alive中,使用include和exclude优先级相关的知识,希望对你有一定的参考价值。

参考技术A 1.使用include的时候,必须给所有路由管理起来的vue组件都设置name属性,不然,没有name属性的也会被缓存下来,这样就不好实现有条件的筛选
2.使用exclude的时候,也必须给所有路由管理起来的vue组件都设置name属性,不然,没有name属性的组件也会被排除在外
3.当同时使用include和exclude的时候,exclude的优先级会更高,include就不生效

4.缓存了组件之后,再次进入组件不会触发beforeCreate、created 、beforeMount、 mounted,如果你想每次进入组件都做一些事情的话,你可以放在activated进入缓存组件的钩子中。
同理:离开缓存组件的时候,beforeDestroy和destroyed并不会触发,可以使用deactivated离开缓存组件的钩子来代替。

vue keep-alive讲解

keep-alive

作用

keep-alive是Vue提供给我们一个内置组件,

作用:保存我们路由切换时组件的状态 , 比如列表页面进入详情,我们想保存列表滚动的位置,我们就可以使用keep-alive保存列表页面的滚动位置。

组件使用keep-alive以后会新增两个生命周期 actived() deactived(),

有两个参数 include - 包裹的组件名会被缓存

​ exclude 包裹的组件名都不会被缓存
keep-alivetransition相似,只是一个抽象组件,它不会在DOM树中渲染(真实或者虚拟都不会),也不在父组件链中存在,比如:你永远在 this.$parent 中找不到 keep-alive

常见用法
  • 全局
<keep-alive><router-view></router-view></keep-alive>
  • 局部
// 这是目前用的比较多的方式
<keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

router设置

... 
  routes: [
    { path: '/', redirect: '/index',  component: Index, meta: { keepAlive: true }},
    {
      path: '/common',
      component: TestParent,
      children: [
        { path: '/test2', component: Test2, meta: { keepAlive: true } } 
      ]
    }
    ....
    // 表示index和test2都使用keep-alive
  • 新增属性inlcude/exclude
<!-- comma-delimited string -->
<keep-alive include="a,b">
  <component :is="view"></component>
</keep-alive>
<!-- regex (use v-bind) -->
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

//其中a,b是组件的name

注意:这种方法都是预先知道组件的名称的

  • 动态判断
<keep-alive :include="includedComponents">
  <router-view></router-view>
</keep-alive>

includedComponents动态设置即可

watch: {
    //使用watch 监听$router的变化
    $route(to, from) {
      //如果to索引大于from索引,判断为前进状态,反之则为后退状态
      if (to.meta.index > from.meta.index) {
        //设置动画名称
        this.transitionName = "slide-left";
      } else {
        this.transitionName = "slide-right";
      }
    },
  },

以上是关于vue的keep-alive中,使用include和exclude优先级的主要内容,如果未能解决你的问题,请参考以下文章

vue 路由缓存 keep-alive include和exclude无效

vue 路由缓存 keep-alive include和exclude无效

vue3使用 keep-alive对iframe进行缓存

vue 缓存组件keep-alive

vue.js的keep-alive include exclude无效

vue.js 使用keep-alive设置返回不刷新