vue项目按需使用keep-alive


需求

list 页面做缓存
add/edit 页面不做缓存
detail 页面不做缓存

前人法子

<keep-alive>
  <!-- 需要缓存 -->
  <router-view :include="include" v-if="$route.meta.keepAlive" />
</keep-alive>

<!-- 不需要缓存 -->
<router-view v-if="!$route.meta.keepAlive" />
export default {
	name: 'app',
	data: () => ({
		include: [],
	}),
	watch: {
		$route(to, from) {
			//如果要to的页面是需要 keepAlive 缓存的,把 name push 进 include数组
			if (to.meta.keepAlive) {
				!this.include.includes(to.name) && this.include.push(to.name);
			}
			//如果要form的页面是 keepAlive缓存的,
			//再根据 deepth 来判断是前进还是后退
			//如果是后退
			if (from.meta.keepAlive && to.meta.deepth < from.meta.deepth) {
				var index = this.include.indexOf(from.name);
				index !== -1 && this.include.splice(index, 1);
			}
		},
	},
};

粗暴法子

<transition name="move" mode="out-in">
  <keep-alive>
    <!-- 需要缓存的视图组件 -->
    <router-view v-if="$route.meta.keepAlive" />
  </keep-alive>
</transition>
<!-- 不需要缓存的视图组件 -->
<router-view v-if="!$route.meta.keepAlive" />

watch: {
  $route(to, from) {
    console.log(to);
    // 如果是后退
    if (to.meta.deepth < from.meta.deepth) {
      to.meta.keepAlive = false;
    } else {
      to.meta.keepAlive = true;
    }
  }
},
new Router({
  routes: [
    {
      path: '/',
      name: 'index',
      component: () => import('./views/keep-alive/index.vue'),
      meta: {
        deepth: 1, // 同级 不刷新
        keepAlive: true
      }
    },
    {
      path: '/list',
      name: 'list',
      component: () => import('./views/keep-alive/list.vue'),
      meta: {
        deepth: 1 // 同级不刷新
        keepAlive: true
      }
    },
    {
      path: '/detail',
      name: 'detail',
      component: () => import('./views/keep-alive/detail.vue'),
      meta: {
        deepth: 0, // 进入list不刷新页面
        keepAlive: false
      }
    },
    {
      path: '/edit',
      name: 'edit',
      component: () => import('./views/keep-alive/edit.vue'),
      meta: {
        deepth: 2, // 进入list刷新页面
        keepAlive: false
      }
    }
  ]
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值