一、什么是keep-alive
在Vue中,keep-alive是一个内置组件,可以缓存不活动的组件,避免重复渲染,提高性能。
keep-alive有两个主要的生命周期方法:activated和deactivated。这两个方法会在组件被激活或被停用时执行。
export default {
activated() {
// 当组件被激活时执行
},
deactivated() {
// 当组件被停用时执行
},
}
二、如何使用keep-alive
2.1 简单使用
在需要缓存的组件外层加上keep-alive标签即可,如下:
<template>
<keep-alive>
<router-view></router-view>
</keep-alive>
</template>
这样,当组件切换时,被缓存的组件会被保留。当回到该组件时,组件不会再次渲染,而是直接从缓存中读取数据。
2.2 缓存指定组件
如果不希望所有组件都被缓存,可以在组件里增加一个key属性,同时在keep-alive外层手动开启缓存。
<template>
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
</template>
这边在router中需要缓存的组件的meta属性中设置keepAlive为true。如果没有设置,组件不会被缓存。
2.3 禁止缓存
如果一个组件不想被缓存,可以在其上加上一个no-cache
的动态属性,来禁止该组件被缓存。
<template>
<keep-alive exclude="no-cache">
<router-view></router-view>
</keep-alive>
</template>
三、如何手动控制缓存
3.1 keep-alive的include和exclude属性
keep-alive可以通过include
和exclude
属性来手动控制缓存哪些组件,哪些组件不缓存。
include用来缓存符合条件的组件,而exclude则用来排除符合条件的组件:
<keep-alive :include="['compA']" :exclude="['compB']">
<router-view></router-view>
</keep-alive>
3.2 激活和停用keep-alive组件
可以使用$refs
来访问一个组件的实例,并调用activate
或deactivate
方法来手动激活或停用该组件。
export default {
mounted() {
const keepAlive = this.$refs.keepAlive;
if (keepAlive) {
keepAlive.activate(componentInstance);
// 或 keepAlive.deactivate(componentInstance);
}
}
}
四、总结
keep-alive是Vue内置的高级组件,可以大大提高应用性能。只要简单地在需要缓存的组件外部加上keep-alive标签即可。如果您还需要更精细的控制,可以使用include和exclude属性,或通过代码手动激活或停用该组件。最后提醒的是,keep-alive虽然可以提高性能,但它并不是万能的,需要结合实际情况进行灵活使用。