當前位置:編程學習大全網 - 編程語言 - vue的路由守衛

vue的路由守衛

vue的路由守衛,也叫路由鉤子、導航守衛或導航鉤子。路由(vue-router) 提供的導航守衛主要用來:通過跳轉或取消的方式守衛導航。有多種機會植入路由導航過程中:全局的,單個路由獨享的, 或者組件級的。

使用 router.beforeEach 註冊全局的前置路由守衛。

當壹個導航觸發時,全局前置守衛按照創建順序調用。守衛是異步解析執行,此時導航在所有守衛 resolve 完之前壹直處於等待中。

方法接收三個參數:

to: Route ,即將要進入的目標 路由對象

from: Route ,當前導航正要離開的路由

next: Function ,壹定要調用該方法來resolve這個鉤子。執行效果依賴 next 方法的調用參數。

? next(): 進行管道中的下壹個鉤子。如果全部鉤子執行完了,則導航的狀態就是confirmed (確認的)。

? next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了 (可能是用戶手動或者瀏覽器後退按鈕),那麽 URL 地址會重置到 from 路由對應的地址。

? next('/') 或者 next({ path: '/' }): 跳轉到壹個不同的地址。當前的導航被中斷,然後進行壹個新的導航。妳可以向 next 傳遞任意位置對象,且允許設置諸如 replace: true、name: 'home' 之類的選項以及任何用在router-link的 to prop或 router.push中的選項。

? next(error): (2.4.0+) 如果傳入 next 的參數是壹個 Error 實例,則導航會被終止且該錯誤會被傳遞給 router.onError()註冊過的回調。

確保要調用 next方法,否則鉤子就不會被 resolved。

使用 router.afterEach 註冊全局的後置守衛。

不同於前置守衛的是,後置守衛沒有 next 函數,也不會改變導航本身。

這個是vue2.5.0版本新增的。使用 router.beforeReslolve 註冊全局的解析守衛。

這和 router.beforeEach 類似,區別在於:在導航被確認之前,同時在所有組件內守衛和異步路由組件被解析之後,解析守衛就被調用。

顧名思義,即單個路由獨享的導航鉤子,使用 boforeEnter 在路由配置上直接進行註冊。

使用方法與全局守衛相同,不同點在於:全局守衛可以作用於全局,路由獨享守衛只作用於被設置守衛的路由。

組件內的守衛分為 beforeRouteEnter beforeRouterUpdate beforeRouteLeave

在渲染該組件的對應路由被 confirm 前調用。

但是並不意味著在 beforeRouteEnter 中無法訪問組件實例,我們可以通過給 next 傳入壹個回調來訪問組件實例。在導航被確認時,會執行這個回調,這時就可以訪問組件實例了。

這個方法是vue-router2.2版本加上的。因為原來的版本中,如果壹個在兩個子路由之間跳轉,是不觸發beforeRouteLeave的。這會導致某些重置操作,沒地方觸發。在之前,我們都是用watch 的。但是通過這個鉤子,我們有了更好的方式。

這個離開守衛通常用來禁止用戶在還未保存修改前突然離開。該導航可以通過 next(false) 來取消。

  • 上一篇:易語言怎麽把菜單寫在_啟動窗口標題上
  • 下一篇:VoIP的基本原理
  • copyright 2024編程學習大全網