next参数已被移除,原先有next的写法为:
router.beforeEach((to, from, next) => {
let token = userStore.token
if (token) {
// 登录成功
if (to.path == '/login') {
next({ path: '/' })
} else {
next()
}
} else {
// 未登录
if (to.path == '/login') {
next()
} else {
next({ path: '/login', query: { redirect: to.path } })
}
}
})
(官方指出——确保 next
在任何给定的导航守卫中都被严格调用一次。以此来确保路由的放行)
不用next的写法为:
router.beforeEach((to, from) => {
let token = userStore.token
if (token) {
// 登录成功
if (to.path == '/login') {
return { path: '/' }
}
} else {
// 未登录
if (to.path !== '/login') {
return { path: '/login', query: { redirect: to.path } }
}
}
})
此方法无需next参数的参与,直接放行路由,可将要跳转的路由地址由return参数返回。
相比之下,不用next更加简洁,方便。