Vue keep-alive基础用法

想使用keep-alive,必须在router和相关组件页面里面添加name属性,且名称对应,如下:

Router

{
	path: '',
	component: layout ,
	children: [
		{
			name: 'Analysis',// 必须滴
			path: '/analysis',
			component:()=>import('@/views/page/analysis/index.vue'),
			meta: { title: '', keepAlive: true	},
		},
	]
},
{
	path: '',
	component: layout,
	children: [
		{
			name: 'ReportDetail',// 必须滴
			path: '/report/detail',
			component:()=>import('@/views/page/analysis/report/detail.vue'),
			meta: {	title: '', keepAlive: false },
		},
	]
}

组件页面

......
export default {
  name: 'Analysis' // 必须滴
}
......

......
export default {
  name: 'ReportDetail' // 必须滴 
}
......

RouterView

<template>
<!-- keep-alive,必须是同级别的router-view时才会起作用,简言之就是两个页面都渲染的同一个router-view -->
	<transition :name="isTransition">
       <keep-alive :include="includePageNames">
         <router-view class="" :key="key" />
       </keep-alive>
    </transition>	
</template>
<script>
import ...
export default {
	name: '',
	data() {
		return {
			isTransition: true? 'slide-left' : '', // 它的具体作用用的时候再研究
      		includePageNames: []
		};
	},
  computed: {
    key() {
      // return this.$key();
      return this.$route.path
    }
  },
  watch: {
    '$route' : {// 监听路由,取值
      handler(nv, ov) {
        for(let i in nv.matched){
          if(i !== 0){
            let indexOf = this.includePageNames.indexOf(nv.matched[i].name)
            //判断数组中是否存在这个name,如果存在,则说明是返回的,要清除缓存
            if(indexOf === -1 && nv.matched[i].meta.keepAlive) {//不存在,添加缓存
              this.includePageNames.push(nv.matched[i].name)
            }
          }
        }
      },
      deep: true,
      immediate: true
    }
  }
};
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值