先看路由守卫无限循环问题


因为你的next({name:login})是相当于⼀个路由跳转,它会再次触发全局路由守卫,你⼜进⼊了全局路由守卫进⾏再次判断,如此循环
想要结束路由守卫,整段代码的逻辑必须由next()进⾏结尾。⽐如当需要进⼊登录页的时候

整体代码如下:

守卫报错扑捉

// 让路由守卫的错误不显示(用路由守卫记得加上这句,重写下抛出错误机制)
// navigationduplicate:避免到当前位置“/about?page=5”的冗余导航。
// 如果当前路由已经是/about,使用编程式导航再次跳转到/about路由,会被认为导航多余,报错,如上
// 解决方案如下:原理是捕获push函数报错,不抛出错误
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err=>err)
}

网友评论