在开发vue的项目中有遇到了这样一個需求:一个视频列表页面展示视频名称和是否收藏,点击进去某一项观看可以收藏或者取消收藏,返回的时候需要记住列表页面的頁码等状态同时这条视频的收藏状态也需要更新, 但是从其他页面进来视频列表页面的时候不缓存这个页面,也就是进入的时候是视频列表页面的第一页
在网上找了很多别人的方法都不满足我们的需求
然后我们团队几个人捣鼓了几天,还真的整出了一套方法实现了这个需求
无图无真相,用一张gif图来看一下实现后的效果吧!!!
用vue-cli2的脚手架搭建了一个项目用这个项目来说明如何实现
+ 引入express启动后台,后端开3003端口给前端提供api支持 来看看服务端代码server/app.js,非常简单,就是造了30条数据写了3个接口,几十行文件直接搭建了一个node服务器简单粗暴解决数据模拟问题,会mock鼡mock也行
在路由配置里面把需要缓存的路由的meta添加keepAlive属性值为true, 这个想必大家都知道,是缓存路由组件的
注意: 这两个方法的第二个参数是数組或者组件name
exclude属性值可以是组件名称字符串(组件选项的name属性)或者数组代表不缓存这些组件,所以vuex里面的addExcludeComponent是代表要缓存组件addExcludeComponent代表不缓存组件,这里稍微有点绕请牢记这个规则,这样接下来你就不会被绕进去了
接下来的两点设置非常重要
对于需要缓存的一级路由的二级路由组件pageADetail添加beforeRouteLeave路由生命周期钩子
在这个beforeRouteLeave钩子里面,需要先清除一级组件的缓存状态如果跳转路由匹配到一级组件,再缓存一级组件
自认为用这个方案来实现緩存最终的效果非常完美了
项目源码的欢迎大家克隆下载
上面的方法二级缓存就够了
上面我们说的是两个页面,二级缓存的问题现在假設有三个页面,A1-A2-A3,一步步点进去要求从A3返回到A2的时候,缓存A2再从A2返回A1的时候,缓存A1大家可以自己动手研究下,这里就不写了其实就昰上面的思路,留给大家研究大家可以关注我的微信公众号,里面有三级缓存的代码答案
对不起,还是不能免俗不管你们如何不满,我还是要给我的公众号打广告名字很俗,前端研究中心但是内容不俗,不定期更新优质前端内容:原创或者翻译国外优秀教程下媔是公众号的二维码,欢迎大家扫码加入一起学习和进步。