当前位置: 首页 > Web前端 > vue.js

vue缓存页面keepAlive的坑(不刷新数据,只缓存第一次进入的页面数据),强制刷新缓存页面的方法

时间:2023-04-01 11:42:57 vue.js

要求:A进入B,根据不同的id刷新B的页面数据,B进入C,C返回B,如果C有操作数据,返回B后刷新B数据,否则B页面不刷新;第一次尝试*思路是从C进入B,缓存B,其他页面进入B,不缓存B页面:beforeRouteLeave(to,from,next){from.meta.keeplive=false;next();},activated(){//根据$route.meta},Cpage//不刷新路由返回上一页beforeRouteLeave(to,from,next){to.meta.type=this.showChange;to.meta.keeplive=true;if(this.edit){to.meta.isrefer=true;//编辑成功后刷新页面B的数据,状态码}else{to.meta.isrefer=false;}下一个();},理论上没有错,但是问题先来一次,A进入B,B进入C,C返回B,第二次缓存B,A进入B,B会刷新,B再进入C,C再返回给B,B的数据第一次进入B数据的原因:因为B的页面参数还是第一次缓存的参数,所以不管怎么重新加载数据,数据还是先进入的B的数据,因为请求的参数从来没有变过。方案1A页面beforeRouteLeave(to,from,next){to.meta.isrefer=true;//刷新B的数据to.meta.type=false;下一个();},B页面beforeRouteEnter(to,from,next){to.meta.keeplive=true;next(vm=>{//这里重新赋值页面初始值,刷新页面if(vm.$route.meta.isrefer){vm.dataList=[];vm.$route.meta.isrefer=false;//恢复初始值vm.seatList=[]vm.query={activityId:vm.$route.query.activityId,meetplaceId:vm.$route.query.meetplaceId,}vm.getSeatImgList()//请求数据}})},beforeRouteLeave(to,from,next){from.meta.keeplive=true;//每次进入页面缓存Bnext();},C页面同上不变App.vue方案2(使用provide和inject)推荐使用1,app.vue页面添加初始值数据(){return{isRouterAlive:true}}添加provideprovide(){return{reload:this.reload};},方法加reload方法reload(){this.isRouterAlive=false;这个.$nextTick(()=>(this.isRouterAlive=true));}2。添加与要缓存的页面和数据同级的注入:["reload"]修改beforeRouterEnterbeforeRouteEnter(to,from,next){to.meta.保活=真;next(vm=>{vm.reload()//调用app.vue的方法}}每一次挖掘都是进步和学习的过程