例:
router.beforeEach((to, from, next) => {
let isLogin = Vue.prototype.$loginInfo.info.is_login
if (to.matched.length === 0) { //沒有匹配到當前路由
next('/error')
} else if (!isLogin && to.path !== '/login' && to.path !== '/register' && to.path !== '/password') {
//如果沒有登入,跳轉到登入頁面
next('/login')
} else {
if ((to.path === '/login' || to.path === '/register' || to.path === '/password' || to.path === '/error') && isLogin) {
//如果已經登入,卻嘗試訪問登入頁面或者錯誤頁面,將繼續保持原本的頁面
next(from.path)
} else {
next()
}
}
// next()
})
複製程式碼
全域性後置鉤子
你也可以註冊全域性後置鉤子,然而和守衛不同的是,這些鉤子不會接受 next
函式也不會改變導航本身:
router.afterEach((to, from) => {
// ...
})
複製程式碼
路由獨享的守衛
你可以在路由配置上直接定義 beforeEnter
守衛:
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
複製程式碼