keep-alive 路由缓存

本文参考:https://blog.csdn.net/qq_34664239/article/details/89499120
是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM,提高性能,通常配合使用
拥有两个钩子函数 activated、deactivated
activated:在组件激活是会被调用
deactivated:在组件停用时被调用
可以查看之前生命周期文章中关于keep-alive中对于这两个钩子函数的打印测试
链接:https://blog.csdn.net/banzhuanren1/article/details/103183495
keep-alive虽然使用方便,但是在实际使用中需求是不一样的,有些组件是不需要进行缓存的,这个文章就介绍实现方式
代码亲测有效

公用代码

//router.js

import Vue from 'vue'
import Router from 'vue-router'
import letter from '@/components/letter';
import tab from '@/components/tab';

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/letter',
      name: 'letter',
      component: letter,
      meta:{
        isKeepAlive:true
      }
    },
    {
      path: '/tab',
      name: 'tab',
      component: tab,
      meta:{
        isKeepAlive:false
      }
    }
  ]
})

//tab子组件
<template>
  <div>
      <div>
          <p>tab组件</p>
            {{ num }}
      </div>
  </div>
</template>
<script>
export default {
    name: 'tab',
    data(){
        return{
            num:0
        }
    },
    created(){
        this.changeNum()
    },
    methods:{
        changeNum(){
            setInterval(() => {
                 this.num++
            }, 1000);
        }
    }
  }
</script>

// letter子组件
<template>
  <div>
      <p>letter组件</p>
      {{ num }}
  </div>
</template>
<script>
export default {
    name: 'letter',
    data(){
        return{
            num:0
        }
    },
    created(){
        this.changeNum()
    },
    methods:{
        changeNum(){
            setInterval(() => {
                 this.num++
            }, 1000);
        }
    }
  }
</script>

第一种方法:
父组件

<template>
  <div id="app">
      <div>
          <router-link  to='/letter'> letter</router-link>
           <router-link to='/tab'> tab</router-link>
      </div>
     isKeepAlive 为路由文件中路由对象配置的属性,根据这个属性来判断组件是否缓存
      <keep-alive >
          <router-view v-if="$route.meta.isKeepAlive"></router-view>
      </keep-alive>
      <router-view v-if="!$route.meta.isKeepAlive"></router-view> -->
  </div>
</template>

第二种方法 include

<template>
  <div id="app">
      <div>
          <router-link  to='/letter'> letter</router-link>
           <router-link to='/tab'> tab</router-link>
      </div>
	  **include: 字符串或正则表达式。只有匹配的组件会被缓存。
	  exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。**
      <keep-alive include="letter">
          <router-view ></router-view>
      </keep-alive>
       <keep-alive include="tab">
          <router-view ></router-view>
      </keep-alive>
  </div>
</template>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值