vue 中的keep-alive标签

前言

引入keep-alive的目的?
有时候,当你从首页,跳转到"我的“之后,当你返回到首页时,希望首页还是处于最后一次操作完成后的状态,即不会重新的去构建一个首页组件。

router-view 与 keep-alive标签

前者是vue-router提供,后者是vue提供,因为keep-alive涉及到vue的生命周期。
接着刚才引入keep-alive的目的,想让首页组件不会被重新构建,那么首先,组件在切换的时候他就不能被销毁,使用keep-alive,可以让组件的生命周期函数不会执行到destroyed()。
使用keep-alive好处:避免重新渲染,缓存路由
具体代码写法:

<keep-alive>
	<router-view></router-view>
</keep-alive>
如何实现记录首页操作及路由路径?

需求:/home组件内有news和messages子组件,当你点击/home/messages ,再切换到/user时,再返回到/home,此时应该显示/home/messages,而不是单纯的一个/home

实现思路:
在Home.vue组件内,使用声明周期函数,created()、destroyed()、activated()、beforeRouteLeave( (to, from, next) => {});

activated简介:
每次点击Home组件后,就进行回调,因此,我们返回home组件时,也会触发这个函数;
beforeRouteLeave简介:
路由发生跳转前,会做的一些事情,即,发生跳转前的一些行为

先在Home组件内定义一个data(),用于存储当前Home下的路由,每次发生activated后,就把这个路由利用$router.push(this.path)去加载/home组件;
那么如何保证这个存储的path是最新的路径呢?
利用beforeRouteLeave,把this.path = this.$route.path就可以了

注意:只有使用了keep-alive标签的组件,才能使用activated和deactivated函数

keep-alive高级用法

需求:因为与/home同级的组件有/user等等,但是要求/user频繁被重构,不希望它被缓存;

实现思路:
利用这个标签内的属性
include : 只有匹配到的组件被缓存
exclude : 只有匹配到的组件不被缓存
二者的类型是 string/reg

使用例子:
<keep-alive exclude ="User, Profile"></keep-alive>
注意:User, Profile这个名称,是定义组件时给定的name

猜你喜欢

转载自blog.csdn.net/weixin_42557786/article/details/115064370
今日推荐