主要用來經過跳轉或取消的方式守衛導航。
例如判斷登陸信息:沒登陸所有跳到登陸頁。判斷必要操做是否進行沒進行的話中斷跳轉。瀏覽器
分爲三大類:全局守衛、路由守衛、組件守衛函數
1. beforeEach 2. beforeResolve 3. afterEach
1. beforeEnter
1. beforeRouteEnter // 在渲染該組件的對應路由被 confirm 前調用 // 不!能!獲取組件實例 `this` // 由於當守衛執行前,組件實例還沒被建立 雖然沒法直接獲取組件實力 可是咱們能夠經過next參數的回調函數獲取到當前實例進行操做 beforeRouteEnter: (to, from, next) => { next((vm) => { //vm就是當前組件實例 }); } 2. beforeRouteUpdate // 在當前路由改變,可是該組件被複用時調用 // 舉例來講,對於一個帶有動態參數的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉的時候, // 因爲會渲染一樣的 Foo 組件,所以組件實例會被複用。而這個鉤子就會在這個狀況下被調用。 // 能夠訪問組件實例 `this` 3. beforeRouteLeave // 導航離開該組件的對應路由時調用 // 能夠訪問組件實例 `this`
這些導航守衛涉及到的參數:to、from、next
除了全局守衛的afterEach只有to和from外其他都有三個參數this
(摘抄自官網) to: Route: 即將要進入的目標 路由對象 from: Route: 當前導航正要離開的路由 next: Function: 必定要調用該方法來 resolve 這個鉤子。執行效果依賴 next 方法的調用參數。 next(): 進行管道中的下一個鉤子。若是所有鉤子執行完了,則導航的狀態就是 confirmed (確認的)。 next(false): 中斷當前的導航。若是瀏覽器的 URL 改變了(多是用戶手動或者瀏覽器後退按鈕),那麼 URL 地址會重置到 from 路由對應的地址。 next('/') 或者 next({ path: '/' }): 跳轉到一個不一樣的地址。當前的導航被中斷,而後進行一個新的導航。 next(error): (2.4.0+) 若是傳入 next 的參數是一個 Error 實例,則導航會被終止且該錯誤會被傳遞給 router.onError() 註冊過的回調。
上圖(別問我圖是誰):(流程圖經過https://www.processon.com 進行繪製)spa