VueRouter進階(1)-導航守衛

簡介

主要用來經過跳轉或取消的方式守衛導航。
例如判斷登陸信息:沒登陸所有跳到登陸頁。判斷必要操做是否進行沒進行的話中斷跳轉。瀏覽器

分爲三大類:全局守衛、路由守衛、組件守衛函數

全局守衛

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

相關文章
相關標籤/搜索