Vue3 中的 keep-alive 用法与 Vue2 中的稍显不同
Vue2.x 与 Vue3.0 的 App.vue
配置有差异,在 App.vue
配置信息如下:
Vue2.x 中,router-view
可整个放入 keep-alive
中,如下:
<template>
<!-- vue2.x配置 -->
<keep-alive>
<router-view v-if="$route.meta.keepAlive"/>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"/>
</template>
Vue3.0 的 App.vue
配置方法如下:
<template>
<!-- vue3.0配置 -->
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component" v-if="$route.meta.keepAlive" />
</keep-alive>
<component :is="Component" v-if="!$route.meta.keepAlive" />
</router-view>
</template>
这里 component 是 vue 中的特殊组件,:is
是用来绑定指定组件,这里是与路由对应的页面绑定。
在对应的路由上添加meta属性来设置页面是否要使用缓存,如下:
{
path: "/keepAliveTest",
name: "keepAliveTest",
meta: {
keepAlive: true //设置页面是否需要使用缓存
},
component: () => import("@/views/keepAliveTest/index.vue")
},
到此即可实现页面的简单缓存,但是有些场景需要做复杂处理,比如说页面部分信息不需要读缓存,每次进入都需要进行处理,这个时候我们就可以使用 activated
生命周期来解决页面部分刷新问题。
先了解 vue 的生命周期,被 keepAlive 包裹的组件和页面,页面进入时执行的生命周期为:created->mounted->activated;
其中 created->mounted
是页面第一次进入才会执行,activated
生命周期在页面每次进入都会执行,特属于 keepAlive
的一个生命周期,所以我们把页面每次进来要进行的操作放入该生命周期即可。
如下代码:
activated() {
// 页面每次进入将手机动态验证码置为空
this.$refs.mobPwdCode.inputValue = '';
},
实现的功能是用户每次进入将动态验证码设为空,实现此功能也可以用其他方式,比如说将该组件放缓存外。