深入理解vue-router之keep-alive
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了深入理解vue-router之keep-alive,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2655字,纯文字阅读大概需要4分钟。
内容图文
keep-alive 简介
keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
用法也很简单:
1
2
3
4
5
|
<
keep-alive
>
<
component
>
<!-- 该组件将被缓存! -->
</
component
>
</
keep-alive
>
|
props
- include - 字符串或正则表达,只有匹配的组件会被缓存
- exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存
1
2
3
4
5
6
7
|
// 组件 a
export
default
{
name:
‘a‘
,
data () {
return
{}
}
}
|
1
2
3
4
5
|
<
keep-alive
include
=
"a"
>
<
component
>
<!-- name 为 a 的组件将被缓存! -->
</
component
>
</
keep-alive
>可以保留它的状态或避免重新渲染
|
1
2
3
4
5
|
<
keep-alive
exclude
=
"a"
>
<
component
>
<!-- 除了 name 为 a 的组件都将被缓存! -->
</
component
>
</
keep-alive
>可以保留它的状态或避免重新渲染
|
遇见 vue-router
router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存:
1
2
3
4
5
|
<
keep-alive
>
<
router-view
>
<!-- 所有路径匹配到的视图组件都会被缓存! -->
</
router-view
>
</
keep-alive
>
|
然而产品汪总是要改需求,拦都拦不住...
问题
如果只想 router-view 里面某个组件被缓存,怎么办?
- 使用 include/exclude
- 增加 router.meta 属性
使用 include/exclude
1
2
3
4
5
6
7
|
// 组件 a
export
default
{
name:
‘a‘
,
data () {
return
{}
}
}
|
1
2
3
4
5
|
<
keep-alive
include
=
"a"
>
<
router-view
>
<!-- 只有路径匹配到的视图 a 组件会被缓存! -->
</
router-view
>
</
keep-alive
>
|
exclude 例子类似。
缺点:需要知道组件的 name,项目复杂的时候不是很好的选择
增加 router.meta 属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// routes 配置
export
default
[
{
path:
‘/‘
,
name:
‘home‘
,
component: Home,
meta: {
keepAlive:
true
// 需要被缓存
}
}, {
path:
‘/:id‘
,
name:
‘edit‘
,
component: Edit,
meta: {
keepAlive:
false
// 不需要被缓存
}
}
]
|
1
2
3
4
5
6
7
8
9
|
<
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 属性:
1
2
3
4
5
6
7
8
|
{
path:
‘/‘
,
name:
‘A‘
,
component: A,
meta: {
keepAlive:
true
// 需要被缓存
}
}
|
在 B 组件里面设置 beforeRouteLeave:
1
2
3
4
5
6
7
8
9
10
11
|
export
default
{
data() {
return
{};
},
methods: {},
beforeRouteLeave(to, from, next) {
// 设置下一个路由的 meta
to.meta.keepAlive =
true
;
// 让 A 缓存,即不刷新
next();
}
};
|
在 C 组件里面设置 beforeRouteLeave:
1
2
3
4
5
6
7
8
9
10
11
|
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 并不能有效的缓存了= =
原文:https://www.cnblogs.com/ygunoil/p/10533864.html
内容总结
以上是互联网集市为您收集整理的深入理解vue-router之keep-alive全部内容,希望文章能够帮你解决深入理解vue-router之keep-alive所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。