在Vue中,導航守衛是一個重要的概念。它允許我們在切換路由或進入某個路由之前執行一些自定義邏輯。而全局導航守衛則是一種可以應用到所有路由上的導航守衛。
//全局前置守衛 router.beforeEach((to, from, next) =>{ // to:即將進入的目標 路由對象 // from:當前導航正要離開的路由對象 // next: 一定要調用該方法來 resolve 這個鉤子,執行效果依賴 next 方法的調用參數 const token = localStorage.getItem('token') if (to.meta.requiresAuth && !token) { // 判斷該路由是否需要登錄權限 next({ path: '/login', query: { redirect: to.fullPath } // 將跳轉的路由path作為參數,登錄成功后跳轉到該路由 }) } else { next() } })
Vue提供了三個全局導航守衛:beforeEach、beforeResolve和afterEach。它們的執行順序是順序執行,而不是管道式嵌套執行。
//全局后置鉤子 router.afterEach((to, from) =>{ // to:即將進入的目標 路由對象 // from:當前導航正要離開的路由對象 })
在使用全局導航守衛時,需要注意以下幾點:
1. 必須調用next()方法,否則路由不會正確執行。如果在路由守衛中沒有調用next()方法,路由就會停止,并且視圖不會被渲染。
2. 如果在路由守衛中調用了next(false),則整個路由導航就會被取消。例如,如果用戶嘗試訪問一個不允許的路由,可以使用next(false)取消路由導航。
3. 如果在路由守衛中調用了next('/'),則路由會重定向到'/'路徑。
4. 可以在路由守衛中使用next(vm =>{...})來訪問實例。這種方式允許我們修改組建實例的一些屬性或執行方法。
總之,全局導航守衛是Vue中非常重要的一個功能,它允許我們在路由切換之前執行自定義邏輯,保證路由的正確執行,并提高用戶體驗。
上一篇vue 單頁模式
下一篇vue 全局使用scss