前言
最近蒸煮在做一个独立项目的时候遇到了一个小坑,特此做个爬坑纪念。
基本情景是页面之间通过vue路由跳转,从页面A跳转到页面B(在页面B进行对应操作后),再从页面B跳转到页面C。之后再从页面C返回到页面B,页面B保留之前状态,返回页面A,页面B状态不保留。("color: #ff0000">vue路由开启keep-alive缓存页面
keep-alive是vue官方提供的一种缓存组件实例的方法。
第一步,先改写<router-view>的展示方式
<keep-alive> //这是会被缓存的页面 <router-view v-if="$route.meta.keepAlive"> </router-view></keep-alive> <router-view v-if = "!$route.meta.keepAlive"> //这里是不被缓存的组件 </router-view>
第二步,在路由配置文件里,配置组件是否被缓存
routes:[ { path: '/', name: 'Index', component: Index, meta:{ title:"博物馆", keepAlive:false//不缓存 } }, { path:'/searchMain', name:'SearchMain', component:SearchMain, meta:{ title:"搜索", keepAlive:true,//缓存 } }, { path:'/collectionDetails', name:'CollectionDetails', component:CollectionDetails, meta:{ title:"藏品详情", keepAlive:false,//不缓存 } }]
这样的话无论什么时候,缓存的组件一直会被缓存
第三步,根据路由钩子来改变缓存组件的状态
beforeRouteLeave(to, from, next) { if(to.path="首页"){ from.meta.keepAlive =false; }else if(to.path="详情页"){ from.meta.keepAlive = true; } // 跳转到 首页时,不缓存,跳转到详情页时缓存(就是不刷新) next(); } 这种行吗?行吗?行吗?不行!!因为第一次的时候确实会成功,可是退出去以后就gg了, 因为keepAlive已经变成了false,第二次就不会缓存。那么第一个页面加下面代码,让他进入的时候 beforeRouteLeave(to, from, next) { if(to.path=="/searchMain"){ to.meta.keepAlive =true; } next(true); return; },
实践证明,搜索界面的数据一直是第一次缓存过的数据。
二,为了解决这个问题,蒸煮想起了keep-alive组件相关的两个钩子函数。
activated:缓存的组件再次进入时触发;
deactivated:缓存的组件离开时会触发;
第一次进入keep-alive组件时,其生命周期执行顺序:
beforeRouteEnter ->created ->mounted ...->activated ->deactivated
非首次进入时,其生命周期执行顺序
beforeRouteEnter ->activated ->deactivated
第二次进入的时候vue组件的生命周期函数都没有执行,说明缓存组件也无法销毁。更无法更新。
解决方法
activated() { if(!this.$route.meta.isBack) { // 如果isBack是false,表明需要获取新数据,否则就不再请求,直接使用缓存的数据 this.getData(); // ajax获取数据方法 } // 恢复成默认的false,避免isBack一直是true,导致下次无法获取数据 this.$route.meta.isBack = false },
但素,重新换取数据,之前保存在data里的数据并没有变,感觉还是不太彻底!
终极解决方案
最后终于到答案的最后一步啦那
就是动态给要缓存的路由组件添加key值啦~
<keep-alive> <router-view v-if="$route.meta.keepAlive" :key='key'></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive" :key='key'></router-view>
在vuex中有条件改变key的值
beforeRouteLeave(to,from,next){ if(to.path=="/"){ this.$store.commit("UPDATE_KEY",this.$route.name!==undefined"htmlcode">beforeRouteLeave(to,from,next){ if(to.path=="/"){ this.$store.commit("UPDATE_KEY",this.$route.name!==undefined"color: #ff0000">总结以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]