vue中使用keepalive实现列表缓存

需求介绍:

// 缓存需求:

// 1. 从列表中访问页面清除缓存

// 2. 详情页返回页面缓存

// 3. 新增返回页面清除缓存

// 4. 编辑返回页面缓存但调用接口

// 5. 多个嵌套页面缓存问题

设计实现步骤:

1,在路由文件添加一个变量控制当前组件是否需要缓存,比方说:

上图中keepAlive变量就是控制当前组件是否需要缓存

2,在app.vue中根据this.$route.meta.keepAlive的值来判断走哪个分支,比方说

hook方法用来监听组件生命周期的回调函数

3,使用vueX对需要缓存的组件路由进行存储,存储方式参考:

(1)当列表需要缓存的时候,keep-alive处于激活状态时,即activated触发的时候,判断当前路由是否存在缓存列表中,存在返回当前对象

(2)根据当前对象中condition和pv判断是否需要清空查询条件,缓存列表(这里目前只加了初始化详情的逻辑,对于新增和编辑condition状态为"add"和"update"的逻辑没有添加)

进阶版:

(3)跳转详情之后返回列表页,在详情组件的beforeRouteLeave中,对列表页的缓存对象进行更新

更新方法:
新增和编辑的时候也可以对组件的缓存进行更新,比方说可以通过如下方式更新

4,当重新刷新缓存页面,或者跳转其他页面之后在回到当前页面之后,没有及时加入缓存的问题,在上面keep-alive包裹的router-view触发hook回调函数,监听组件的生命周期created,

判断当前路由组件的keepAlive变量为true,并且store中缓存数组caches为空的时候,初始化缓存数组caches

初始化的【handleCache】方法:

总之,先设置缓存变量,根据变量判断是否需要keep-alive包裹,结合activated, beforeRouteLeave以及vueX添加更新缓存的逻辑,同时利用hook解决初始化的问题。

相关推荐
奎叔11 分钟前
Flutter 异常处理体系:从捕获、转换到恢复
前端
心念枕惊14 分钟前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
小徐_233317 分钟前
寓言故事一则:狗猛酒酸
前端·ai编程
xiaobaoyu35 分钟前
vue2+element开发中问题和解决方式
前端
KaMeidebaby36 分钟前
卡梅德生物技术快报 | 核酸适配体文库测序:核酸适配体文库测序的技术原理、实验流程与数据解析
前端·网络·数据库·人工智能·算法
Hilaku1 小时前
为什么在 2026 年,MPA(多页面应用)正在悄悄复辟?
前端·javascript·程序员
幸福小宝1 小时前
eslint和prettier
前端
anyup1 小时前
终于在今天入选了 Gitee GVP,这真值得庆祝~
前端·uni-app·开源
幸福小宝1 小时前
husky和lint-staged
前端
悟空瞎说1 小时前
iOS 高效绘图
javascript