今天在做項目的時候遇到一個功能:登錄后才能進入其他界面的一個權限,叫做路由守衛。
那這個路由守衛具體怎么實現呢?我查閱了官網:
官網關於路由守衛的解釋是:全局的, 單個路由獨享的, 或者組件級的
記住參數或查詢的改變並不會觸發進入/離開的導航守衛。
我復制了官網的一個關於未驗證身份重定向的例子,給大家作參考:
router.beforeEach((to, from, next) => { if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) else next() })
每個守衛方法接收三個參數:
-
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()
注冊過的回調。
-
看過長篇大論不知道你是不是頭都大了!!
其實你只要理解to、from、next、next()的含義就可以看懂上述代碼了~~
說到最后,上述例子中直接復制就可以了,但是千萬千萬不要忘了在路由里添加一個name屬性要不要是不會生效的哦~~
附圖:
請大家還是多看看官網,一定會有你想不到的收獲~
最后的最后附上官網地址:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html