前言
最近在整理基礎,歡迎部落格園的朋友們一起交流學習
結尾有彩蛋哦! ???
Vue Router 路由守衛
導圖目錄
- 路由守衛分類
- 全域性路由守衛
- 單個路由守衛
- 元件路由守衛
- 路由守衛執行的完整過程
路由守衛分類
- 全域性路由
- 單個路由獨享
- 元件內部路由
每個路由守衛的鉤子函式都有 3 個引數:
to
: 進入的目標路由
from
: 離開的路由
next
: 控制路由 在跳轉時進行的操作,一定要執行。它有 4 個行為:
next()
: 鉤子都執行完了,進入到下一個路由當中。
next(false)
: 中斷路由進入下一個路由。
next('/')
: 根據你路由跳轉判斷條件來進入對應的路由,/
為路由的path
。
next(new Error)
: 中斷路由跳轉,錯誤會被傳遞給router.onError()
註冊過的回撥。
全域性路由守衛
beforeEach(to,from, next)
beforeResolve(to,from, next)
afterEach(to,from)
全域性路由直接掛載到
router
例項上。
//全域性驗證路由
const router = createRouter({
history: createWebHashHistory(),
routes
});
// 白名單, 不需要驗證的路由
const whiteList = ['/','/register']
router.beforeEach((to,from,next)=>{
if(whiteList.indexOf(to.path) === 0) {
// 放行,進入下一個路由
next()
} else if(!(sessionStorage.getItem('token'))){
next('/');
} else {
next()
}
})
beforeEach
使用場景
路由跳轉前觸發
作用
常用於登入驗證
beforeResolve
使用場景
在 beforeEach 和 元件內beforeRouteEnter 之後,afterEach之前呼叫。
afterEach
使用場景
- 發生在beforeEach和beforeResolve之後,beforeRouteEnter之前。
- 路由在觸發後執行
單個路由獨享
它只有一個 鉤子函式,
beforeEnter(to,from,next)
beforeEnter
使用場景
在beforeEach之後執行,和它功能一樣 ,不怎麼常用
{
path:'/superior',
component: Superior,
meta:{
icon:'el-icon-s-check',
title:'上級檔案'
},
beforeEnter:(to,form,next) =>{
}
}
元件路由守衛
特點:
元件內執行的鉤子函式
鉤子函式:
beforeRouteEnter(to,from,next)
beforeRouteUpdate(to,from,next)
beforeRouteLeave(to,from,next)
beforeRouteEnter
使用場景:
- 路由進入之前呼叫。
- 不能獲取元件
this
例項 ,因為路由在進入元件之前,元件例項還沒有被建立。執行順序
beforeEach
和獨享守衛beforeEnter
之後,全域性beforeResolve
和全域性afterEach
之前呼叫.
beforeRouteUpdate
使用場景:
- 在當前路由改變時,並且該元件被複用時呼叫,可以通過this訪問例項。
- 當前路由query變更時,該守衛會被呼叫。
beforeRouteLeave
使用場景:
導航離開該元件的對應路由時呼叫,可以訪問元件例項this
路由守衛執行的完整過程
- 導航被觸發
- 執行 元件內部路由守衛:
beforeRouteLeave
- 執行 全域性路由守衛
beforeEach
- 在重用元件內部路由守衛鉤子
beforeRouteUpdate
- 執行 路由中的鉤子
beforeEnter
- 在被啟用的元件裡呼叫 beforeRouteEnter
- 執行 全域性的 beforeResolve 守衛 。
- 執行 全域性的 afterEach 鉤子
- beforeCreate
- created
- beforeMount
- mounted
- 執行 beforeRouteEnter的next的回撥 ,建立好的元件例項會作為回撥函式的引數傳入。
最後
文中如有錯誤,歡迎碼友在評論區指正,如果對你有所幫助,歡迎點贊和關注~~~
❤️關注+點贊+收藏+評論+轉發❤️,原創不易,鼓勵筆者創作更好的文章