vue路由中前进后退的一些事儿

  

  

最近蒸煮在做一个独立项目的时候遇到了一个小坑,特此做个爬坑纪念。

  

基本情景是页面之间通过vue路由跳转,从页面一跳转到页面B(在页B面进行对应操作后),再从页B面跳转到页面C之后再从页面C返回到页B面页面B保留之前状态,返回页面,页B面状态不保留。(& # 65377;& # 65381;& # 8704;& # 65381;)& # 65417;& # 65438;嗨~感觉说的好乱。

  

总之就是,前进刷新,后退不刷新(刷新是指是否重新渲染)

  

相信很多小伙伴都会想到用点火电极开启缓存页面来实现,鹅,蒸煮也没例外,下面就是蒸煮的爬坑过程。

  

  

维生是vue官方提供的一种缓存组件实例的方法。

  

第一步,先改写& lt; router-view>的展示方式

        & lt; keep-alive>//这是会被缓存的页面   & lt; router-view v=" $ route.meta.keepAlive "比;   & lt;/router-view> & lt;/keep-alive>   & lt; router-view v=" ! route.meta.keepAlive美元”在//这里是不被缓存的组件   & lt;/router-view>      

第二步,在路由配置文件里,配置组件是否被缓存

        路线:[   {路径:“/?   名称:“指数”,   组件:指数,   元:{   标题:“博物馆”,   keepAlive:假//不缓存   }   },   {   路径:/searchMain,   名称:“SearchMain”,   组件:SearchMain,   元:{   标题:“搜索”,   keepAlive:真的,//缓存   }   },   {   路径:/collectionDetails,   名称:“CollectionDetails”,   组件:CollectionDetails,   元:{   标题:“藏品详情”,   keepAlive:假的,//不缓存   }   }]      

这样的话无论什么时候,缓存的组件一直会被缓存

  

第三步,根据路由钩子来改变缓存组件的状态

        beforeRouteLeave(下),从{   如果(to.path=笆滓场?{   from.meta。keepAlive=false;   }else if (to.path="详情页”){   from.meta。keepAlive=true;   }//跳转到首页时,不缓存,跳转到详情页时缓存(就是不刷新)   next ();   }   这种行吗?行吗?行吗?不行! !因为第一次的时候确实会成功,可是退出去以后就gg了,   因为keepAlive已经变成了假,第二次就不会缓存。那么第一个页面加下面代码,让他进入的时候   beforeRouteLeave(下),从{   如果(to.path=="/searchMain”) {   to.meta。keepAlive=true;   }   下一个(真正的);   返回;   },      

实践证明,搜索界面的数据一直是第一次缓存过的数据。

  

二,为了解决这个问题,蒸煮想起了点火电极组件相关的两个钩子函数。

  

激活:缓存的组件再次进入时触发;

  

停用:缓存的组件离开时会触发;

  

第一次进入点火电极组件时,其生命周期执行顺序:

        beforeRouteEnter→→创建安装…→活化→停用      

非首次进入时,其生命周期执行顺序

        beforeRouteEnter→活化→停用      

第二次进入的时候vue组件的生命周期函数都没有执行,说明缓存组件也无法销毁。更无法更新。

  

        激活(){   如果(!这。route.meta.isBack美元){//如果isBack是假的,表明需要获取新数据,否则就不再请求,直接使用缓存的数据this.getData ();//ajax获取数据方法   }//恢复成默认的假,避免isBack一直是真的,导致下次无法获取数据   route.meta美元。isBack=false   },      

但素,重新换取数据,之前保存在数据里的数据并没有变,感觉还是不太彻底!

  

  

最后终于到答案的最后一步啦那

  

就是动态给要缓存的路由组件添加键值啦~

        & lt; keep-alive>   & lt; router-view v=" route.meta美元。keepAlive”:关键=肮丶弊4? lt;/router-view>   & lt;/keep-alive>   & lt; router-view v=" ! route.meta美元。keepAlive”:关键=肮丶弊4? lt;/router-view>      

在vuex中有条件改变关键的值

        beforeRouteLeave(下),从{   如果(to.path=="/") {   。store.commit美元(“UPDATE_KEY”。$ route.name !==定义# 63;route.name美元。+   +新的日期():。$ + +新日期());   }   }      

这样的话就会有一个很重要的问题,这些缓存过的组件,都是在内存中的,如果一直操作,内存堆积越来越大,导致系统卡顿,所以离开时就销毁吧

vue路由中前进后退的一些事儿