vue-router 实现组件的缓存之 keep-alive
来源:互联网 发布:运动品牌折扣软件 编辑:程序博客网 时间:2024/04/30 00:19
一、keep-alive
简介 keep-alive
是Vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
用法:
<keep-alive> <component> <!-- 该组件将被缓存! --> </component></keep-alive>
props
include-字符串或正则表达式,只有匹配的组件会被缓存
exclude-字符串或正则表达式,任何匹配的组件都不会被缓存
//组件 aexport default { name: 'a', data () { return {} }}
<keep-alive include="a"> <component> <!-- name 为 a 的组件将被缓存! --> </component></keep-alive>可以保留它的状态或避免重新渲染
<keep-alive exclude="a"> <component> <!-- 除了 name 为 a 的组件都将被缓存! --> </component></keep-alive>可以保留它的状态或避免重新渲染
遇见vue-router router-view
也是一个组件,如果直接被包在keep-alive
里面,所有路径匹配到的视图组件都会被缓存:
<keep-alive> <router-view> <!-- 所有路径匹配到的视图组件都会被缓存! --> </router-view></keep-alive>
问题
如果只想router-view里面某个组件被缓存,怎么办?
1、使用include/exclude
2、增加router.meta属性
第一种方法上面已经描述,下面说第二种方法
增加router.meta属性
// routes 配置export default [ { path: '/', name: 'home', component: Home, meta: { keepAlive: true // 需要被缓存 } }, { path: '/:id', name: 'edit', component: Edit, meta: { keepAlive: false // 不需要被缓存 } }]
<keep-alive> <router-view v-if="$route.meta.keepAlive"> <!-- 这里是会被缓存的视图组件,比如 Home! --> </router-view></keep-alive><router-view v-if="!$route.meta.keepAlive"> <!-- 这里是不被缓存的视图组件,比如 Edit! --></router-view>
《附加》使用 router.meta 拓展
假设这里有 3 个路由: A、B、C。
需求:
默认显示 A
B 跳到 A,A 不刷新
C 跳到 A,A 刷新
实现方式:
在 A 路由里面设置 meta 属性:
{ path: '/', name: 'A', component: A, meta: { keepAlive: true // 需要被缓存 }}
在 B 组件里面设置 beforeRouteLeave:
export default { data() { return {}; }, methods: {}, beforeRouteLeave(to, from, next) { // 设置下一个路由的 meta to.meta.keepAlive = true; // 让 A 缓存,即不刷新 next(); }};
在 C 组件里面设置 beforeRouteLeave:
export default { data() { return {}; }, methods: {}, beforeRouteLeave(to, from, next) { // 设置下一个路由的 meta to.meta.keepAlive = false; // 让 A 不缓存,即刷新 next(); }};
这样便能实现 B 回到 A,A 不刷新;而 C 回到 A 则刷新。
总结
路由大法不错,不需要关心哪个页面跳转过来的,只要 router.go(-1) 就能回去,不需要额外参数。
然而在非单页应用的时候,keep-alive 并不能有效的缓存了= =
阅读全文
0 0
- vue-router 实现组件的缓存之 keep-alive
- vue-router 之 keep-alive
- vue 如何使某个组件不被 keep-alive 缓存
- vue keep-alive的作用
- vue,keep-alive的作用
- vue项目优化之通过keep-alive数据缓存(vue+webpack)
- keep-alive的深入理解与使用(配合router-view缓存整个路由页面)
- 聊聊keep-alive组件的使用及其实现原理
- vue keep-alive 标签的实践方案
- vue keep-alive的简单使用
- Vue keep-alive
- vue keep-alive生命周期
- 修改vue的keep-alive实现仿easyui-页面tab切换
- Vue keep-alive实践总结
- (vue.js)vue 父组件使用keep-alive和infinite-scroll导致在子组件触发父组件的infinite-scroll方法
- Vue路由开启keep-alive时的注意点
- Vue路由开启keep-alive时的注意点
- Vue路由开启keep-alive时的注意点
- 关于 Failure [INSTALL_FAILED_DEXOPT] 的解决方案。
- 所有排序,里面都有参数“-1”来决定顺序,例如range(3,0,-1)
- JAVA jvm 学习(一).运行时数据区
- android蓝牙的调试(博通蓝牙工作 and 低功耗模式)
- [App] Nginx 切割日志
- vue-router 实现组件的缓存之 keep-alive
- 关于HTTP协议
- GameEntity(七)—— Friend
- 实验五 树和二叉树的实验1
- java8 自定义Collector
- STM32控制APM飞控(二)MAVLINK源码集成到stm32工程中
- 51nod 1647 小Z的trie 广义后缀自动机+倍增
- CT重建学习笔记(二)
- 加油