在这里需要注意的是,通过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' }); } } });