前言: vue-router实际上刷新客户端页面是不会丢失query的,但是在项目中遇到了这个问题,以前没有细看代码,导致项目复杂度变高。
是怎么触发这个刷新页面导致query丢失的呢?
其实就是path与fullPath这两个值的正确使用了。
我来描述一下情景,其实就是,在导航守卫中,判断了页面是否有刷新操作,然后进行业务处理,代码奉上:
//导航守卫
router.beforeEach((to, from, next) => {
//业务逻辑代码
//....
if(******) {
return;
}
//...
return next(to.path)
});
细看这里的操作感觉没问题,但是可以打印一下to,结果如图
这里fullPath是完整的路由,而path是不带query的,但是是具有params的。所以只需要把to.path换成to.fullPath就可以解决这个问题了
当然,也描述一下之前的做法
采取的是将路由做持久化存储,在页面进来时添加进localstorage或者sessionStorage,在刷新的时候重新在存储中取出来,重新router.push上去,在离开页面的时候清空。
是不是觉得很复杂,就一句代码就可以解决的问题。所以代码还是要认真点,不然逻辑有问题不能及时发现。