例:bash
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
守衛:ui
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
複製代碼