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解决初始化的问题。

相关推荐
Csvn1 小时前
WASM
前端
修己xj2 小时前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端
FRing033 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
幸运小猿3 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
moshuying5 小时前
网购能买Token了!
前端
h_65432105 小时前
echarts实现柱状图加一条横线
前端·echarts
风骏时光牛马5 小时前
生成一个后端标题,只需要一个标题,不需要其他的任何文本。
前端
子非鱼@Itfuture5 小时前
关于前后端联调中登录状态/登录信息失效?
java·前端
郭小李5 小时前
openFeign入门
java·开发语言·前端
馒头不想说话5 小时前
AI当运营,帮你省人力
前端