vue路由缓存如何实现
Vue路由缓存的实现方法
使用<keep-alive>组件
在Vue中可以通过<keep-alive>组件缓存路由组件,避免重复渲染。在路由出口处包裹<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>
配置路由元信息
在路由配置中通过meta字段标记需要缓存的组件:
const routes = [
{
path: '/home',
component: Home,
meta: { keepAlive: true }
},
{
path: '/about',
component: About,
meta: { keepAlive: false }
}
]
动态控制缓存
可以通过include/exclude属性精确控制哪些组件需要缓存:
<keep-alive :include="['Home', 'Profile']">
<router-view></router-view>
</keep-alive>
组件生命周期钩子
被缓存的组件会触发特定的生命周期钩子:
activated:组件被激活时调用deactivated:组件被停用时调用
export default {
activated() {
console.log('组件被激活')
},
deactivated() {
console.log('组件被停用')
}
}
滚动行为保持
在路由配置中实现滚动行为保持:
const router = new VueRouter({
routes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
return { x: 0, y: 0 }
}
}
})
注意事项
- 被缓存的组件必须有
name选项,且与include/exclude中的名称匹配 - 动态路由参数变化时,相同组件实例会被复用,可以通过
watch监听$route变化 - 缓存大量组件可能导致内存占用过高,需合理控制缓存范围






