vue项目中keep-alive、meta的实际应用

本文介绍了如何在Vue项目中利用keep-alive和$route.meta属性来实现特定页面的缓存策略,确保司机库、企业信息管理和设备库列表页在返回时能保持筛选状态。在实现过程中,注意避免将v-if直接应用于keep-alive,并通过路由守卫处理列表页的筛选状态。同时,文章提到了keep-alive的生命周期钩子函数activated和deactivated的使用,以及v-if和v-show的选择策略。
摘要由CSDN通过智能技术生成

需求:司机库、企业信息管理、设备库三个模块的页面在数据详情页及数据操作页回退到列表页面可以保留用户之前的筛选状态,其他页面无需保留筛选状态
实现:用keep-alive包裹组件router-view,通过$route.meta的keepAlive属性区分需要缓存的页面

在这里插入图片描述
在这里插入图片描述

需要注意的点:v-if不能加在keep-alive上面会使缓存失效,可以加在router-view上或者在keep-alive上改用include,keep-alive是缓存不活动的组件实例(把router-view里的内容存在组件的data里),不会销毁,如果加上v-if判断,判断值发生改变并为false时缓存会被销毁,组件data里的参数就会被回收。

遇到的问题1:其他列表页切换过来时会依旧停留在筛选状态

解决方法:通过路由守卫改变keepAlive的值

beforeRouteLeave(to, from, next) { 		 //详情页
     if(to.name == 'DeviceLibrary'){
         to.meta.keepAlive = true;      //详情页跳到列表页时,设置列表页路由meta中keepAlive的值为true,让列表页缓存
     }
     next();
},
beforeRouteEnter(to, from, next) {                      //列表页
    next(vm => {
         if(from.name != 'DeviceArchives'){
             to.meta.keepAlive = false;       //如果不是详情页跳转过来,设置列表页路由meta中keepAlive的值为false,不让列表页缓存
         }else{
             to.meta.keepAlive = true;      //如果是详情页跳转过来,设置列表页路由meta中keepAlive的值为true,让列表页缓存
         }
     });
}

遇到的问题2:始终保留了第一次缓存的数据(换个思路,改为不是详情页进入列表页就将搜索框清空并调用列表接口)

beforeRouteEnter(to, from, next) {                      //列表页
    next(vm => {
         if(from.name != 'DeviceArchives'){
             vm.decvalue = '';
             vm.decList();
         }
    });
},

keep-alive生命周期钩子函数:activated、deactivated
初次进入时:created > mounted >activated(被 keep-alive 缓存的组件激活时调用);退出后触发deactivated。
再次进入:会触发activated;事件挂载的方法等只执行一次的放在 mounted 中;组件每次进去执行的方法放在 activated 中。

v-if 如果条件不满足,会直接不进行渲染。(运行条件很少改变时使用)
v-show 无论条件满不满足都会在初始化的时候编译并渲染,只是不满足条件的元素是会 display:none。(需要频繁切换时使用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值