需求背景
在进行条件搜索时候对搜索数据进行详细页查看时候,回退上一页面$rotuer.back()。需要保留原来的搜索条件和数据
keep-alive 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。结合vue-router中使用,可以缓存某个view的整个内容。
这位作者写的很仔细
上代码
App.vue页面
<keep-alive>
<router-view v-if="$route.meta.keepAlive">
</router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" />
路由设置界面 router/index.js
meta: {
plate:"text",
title: "账号",
icon: "icon-wg-menu1",
menu: "show",
menuName: "Monitor",
keepAlive: true // true 表示需要使用缓存
},
这样就可以实现回退保留搜索条件和数据了
关键点
1.keep-alive 代码可以结合 v-if 进行包裹,如果 meta 中的 keepAlive 为 true 进行缓存,否侧不进行缓存。
2.使用< keep-alive > 会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在 activated 阶段获取数据,承担原来created钩子中获取数据的任务。
被包含在 < keep-alive > 中创建的组件,会多出两个生命周期的钩子: activated 与 deactivated
activated:在组件被激活时调用,在组件第一次渲染时也会被调用,之后每次keep-alive激活时被调用。
deactivated:在组件被停用时调用。
注意: 只有组件被 keep-alive 包裹时,这两个生命周期才会被调用,如果作为正常组件使用,是不会被调用,以及在 2.1.0 版本之后,使用 exclude 排除之后,就算被包裹在 keep-alive 中,这两个钩子依然不会被调用!另外在服务端渲染时此钩子也不会被调用的。