❤ vue路由遇到 Redirected when going from “/login“ to “/“ via a navigation guard错误
路由版本:“vue-router”: “^3.5.2”,
添加了路由守卫,然后开始报这个错误,
-
原因
就是路由版本导致的 -
解决办法
// 导航守卫限制路由跳转
router.beforeEach((to, from, next) => {
if (to.path === '/login') {
next()
var tokenStr = window.sessionStorage.getItem('token')
}
if (!tokenStr) {
next()
} else {
next('/login')
}
})
// router 要跟你引用的路由名称一致
路由版本3.2到3.0的话,应该可以用下面这个办法解决
//获取原型对象上的push函数
const originalPush = VueRouter.prototype.push
//修改原型对象中的push方法
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}
// 导航守卫限制路由跳转
router.beforeEach((to, from, next) => {
if (!to.meta.isPublic && !localStorage.token){
return next('/login')
}
next()
})
- 完整版
// 防止连续点击多次路由报错
let originPush = Router.prototype.push; //备份原push方法
Router.prototype.push = function (location, resolve, reject){
// return routerPush.call(this, location).catch(err => err)
if (resolve && reject) { //如果传了回调函数,直接使用
originPush.call(this, location, resolve, reject);
}else { //如果没有传回调函数,手动添加
originPush.call(this, location, ()=>{}, ()=>{});
}
}