项目开发中在用户由分类页category进入detail需保存用户状态,查阅了Vue官网后,发现vue2.0提供了一个keep-alive组件。
上一篇讲了keep-alive的基本用法,现在说说遇到的坑。
先说项目中的配置
在App.vue中的设置
在router中增加配置meta

上面这个设置后发现问题了,从category进入detail页后,状态被保存了,返回的时候保存了用户状态,达到了预期效果
但问题在于但从category返回到index后,再由index进入category时依然显示是缓存中的页面,此刻页面没有刷新。
返回index后的组件显示如下:
分析从index再次进入category时,直接读取了缓存的里的页面。
头大。。。。。。。我的目标只是缓存从category进入detail页面,其他的时候不缓存。
解决方案
在category中启用beforeRouteLeave钩子函数
beforeRouteLeave中只有从category进入detail时才进行缓存,其他页面都讲category的keepalive设置成false,并销毁此category组件;
然而,发现新的问题。。。。。。
第一次操作index--> category ---> detail的时候是理想效果,但当第二次操作返回index后,进行index --> category --> detail --> category时,发现缓存的对象又不对了,从detail返回category时,保存是的第一次进入detail的分类情况。
此刻category的组件显示如下
无奈。。。。。对比了第一次和第二次进入页面情况
根据vue-router提供的守卫可在路由中启用afterEach路由守卫,在afterEach中进行判断是否第一次进入,非第一次进入页面情况强制刷新一次category页面。 
至此终于解决了这个问题。
网友提供了其他的解决方案可以参考下,
https://www.jianshu.com/p/cd1baf5b03b0
也可以参考github上关于keep-alive缓存相关的问。
https://github.com/vuejs/vue-router/issues/811#issuecomment-353875880

转载于:https://www.cnblogs.com/nokelong/p/8124513.html

vue中使用keepAlive组件缓存遇到的坑相关推荐

  1. React中实现keepalive组件缓存效果

    背景:由于react官方并没有提供缓存组件相关的api(类似vue中的keepalive),在某些场景,会使得页面交互性变的很差,比如在有搜索条件的表格页面,点击某一条数据跳转到详情页面,再返回表格页 ...

  2. Vue中的keep-alive组件

    keep-alive router-view 也是一个组件,如果直接被包在keep-alive里面,所有路径匹配到的视图组件都会缓存,保持生存 keep-alive是Vue内置的一个组件,可以使被包含 ...

  3. Angular5实现组件缓存(RouteReuseStrategy)类似vue中的keep-alive的效果

    Angular和React中实现组件的缓存是没有类似vue中的<keep-alive></keep-alive>这种很爽的方式的,但是并不意味着Angular和React不能实 ...

  4. vue树形结构html,怎么在vue中利用递归组件实现一个树形控件

    怎么在vue中利用递归组件实现一个树形控件 发布时间:2021-06-11 17:26:48 来源:亿速云 阅读:81 作者:Leah 本篇文章为大家展示了怎么在vue中利用递归组件实现一个树形控件, ...

  5. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于"父子组件通信"的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰 ...

  6. vue中写svg组件svg图片加载不出来

    vue中写svg组件svg图片加载不出来 结构 首先要安装3个插件:svg-sprite-loader,svgo,svgo-loader npm install svg-sprite-loader - ...

  7. vue中,兄弟组件之间传值

    vue中,兄弟组件之间传值 项目中,需要使用多个子组件,当需要传递值的时候,较为麻烦,怎样实现呢 1.一般可以使用子组件a传递给父组件,再由父组件传递给子组件b.但是一般较为麻烦, 2.使用bus作为 ...

  8. Vue中,一个组件调用其他组件的方法(非父子组件)

    Vue中,一个组件调用其他组件的方法(非父子组件) 场景--B页面(组件)想调用 A页面(组件)中的方法:但是两个页面(组件)毫无关联(刷新 A的数据). 方式一:引用式 1.当前组件引入将要调用方法 ...

  9. Vue keep-alive组件缓存 基础用法

    keep-aliive组件 <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们. 当组件在 <keep-alive> 内被切换,它的 activa ...

最新文章

  1. 函数计算新功能-----支持C#函数
  2. C#事件(Event)的理解
  3. python未将对象引用设置到对象的实例_在Python中使用pingarapi。服务器引发Webfault:对象引用未设置为对象的实例...
  4. c语言添加收支情况,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  5. 这几个公众号带你看看BAT的工作情况
  6. nginx php 104,记一次nginx 502排错经历:recv() failed (104: Connection reset by peer)
  7. ARCHICAD 25 for Mac(cad绘图软件)
  8. java adt eclipse_Eclipse安装ADT插件
  9. UNIX网络编程的5种IO模型
  10. 最强烈推荐-我的java收藏夹(内有国内最好的java论坛)
  11. android apktool反编译,apktool反编译工具
  12. discuz X2中template文件夹中模板文件目录
  13. 速达开发版ERP移动端 App 操作使用说明
  14. Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException
  15. this.$nextTick
  16. 容器云职业技能大赛 不一样的比赛
  17. 工业4.0的概念及关键要素价值分析
  18. IDEA 远程断点调试
  19. revit阶梯剖的创建方法及快速剖面操作
  20. 关于树的最全知识就在这里了

热门文章

  1. express+mongodb+vue实现增删改查-全栈之路
  2. 单点登录实现(spring session+redis完成session共享)
  3. Tomcat相关目录及配置文件总结
  4. Python 发送邮件 和 发送带附件邮件
  5. time,gettimeofday,clock_gettime,_ftime
  6. 如何修改snmp的监听端口
  7. Android 自定义控件一 带圆形进度的按钮 ControlButton2
  8. struts 2.x版本 datetimepicker日期控件的使用
  9. SQL Server 与 SQL Express 的异同
  10. 解决ActionBar中的不显示View控件