深入理解vue-router之keep-alive
网络编程 2021-07-04 18:33www.168986.cn编程入门
本篇文章主要介绍了深入理解vue-router之keep-alive。keep-alive使被包含的组件保留状态,或避免重新渲染,有兴趣的可以了解一下
本文基于 Vue2.0
keep-alive 简介
keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
用法也很简单
<keep-alive> <ponent> <!-- 该组件将被缓存! --> </ponent> </keep-alive>
props
- include - 字符串或正则表达,只有匹配的组件会被缓存
- exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存
// 组件 a export default { name: 'a', data () { return {} } }
<keep-alive include="a"> <ponent> <!-- name 为 a 的组件将被缓存! --> </ponent> </keep-alive>可以保留它的状态或避免重新渲染
<keep-alive exclude="a"> <ponent> <!-- 除了 name 为 a 的组件都将被缓存! --> </ponent> </keep-alive>可以保留它的状态或避免重新渲染
遇见 vue-router
router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存
<keep-alive> <router-view> <!-- 所有路径匹配到的视图组件都会被缓存! --> </router-view> </keep-alive>
产品汪总是要改需求,拦都拦不住...
问题
如果只想 router-view 里面某个组件被缓存,怎么办?
- 使用 include/exclude
- 增加 router.meta 属性
使用 include/exclude
// 组件 a export default { name: 'a', data () { return {} } }
<keep-alive include="a"> <router-view> <!-- 只有路径匹配到的视图 a 组件会被缓存! --> </router-view> </keep-alive>
exclude 例子类似。
缺点需要知道组件的 name,项目复杂的时候不是很好的选择
增加 router.meta 属性
// routes 配置 export default [ { path: '/', name: 'home', ponent: Home, meta: { keepAlive: true // 需要被缓存 } }, { path: '/:id', name: 'edit', ponent: 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', ponent: 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 并不能有效的缓存了= =
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程