在这里需要注意的是,通过next({name:'xxx'}),就要通过to.name ==='login'去判断;如果是通过next({path:'xxx'})跳转,就要通过to.path==='/login'去判断,他们必须一一对应。这两种方式是改变路由的跳转路径,但是不管怎么样,最后一定要执行next()才可以被resolved。如果next()没有被执行,就会出现无限循环,最后浏览器就崩了!
总结一下:
1. beforeEach收尾中必须要执行next()才不会出现无限循环
2. 路由跳转时,属性需要一致,to.name/to.path等
router.beforeEach((to, from, next) => {
if (localStorage.getItem('username')) { // 如果已经登录的话
next();
} else {
if (to.path === '/login') { // 如果是登录页面的话,直接next()
next();
} else { // 否则 跳转到登录页面
next({
path: '/login'
});
}
}
});