這里先放上官網(wǎng)的教程和說明:點擊這里绞呈,vue導航守衛(wèi)官方文檔
路由守衛(wèi)
路由守衛(wèi)說白了就是路由攔截运吓,在地址欄跳轉之前 之后 跳轉的瞬間 干什么事
全局守衛(wèi)
全局守衛(wèi)顧名思義尘颓,就是全局的,整個項目所有路由主胧,跳轉所用到的守衛(wèi)(攔截)叭首,設置了全局守衛(wèi)之后习勤,只要路由(瀏覽器地址欄)發(fā)生變化就會觸發(fā)的事件
全局守衛(wèi)分為二部分 前置守衛(wèi)(跳轉之前) 后置鉤子(跳轉之后)
前置守衛(wèi):
router.beforeEach
這個方法有三個參數(shù)
(to, from, next)
to:即將進入的地址,比如說 點擊按鈕 從 A 跳轉到 B 放棒,那么to就是 B 的路由對象姻报,
from:要離開的地址,比如說 點擊按鈕 從 A 跳轉到 B 间螟,那么to就是 A 的路由對象吴旋,
next:就是在跳轉的時候要執(zhí)行的事件,比如說 點擊按鈕 從 A 跳轉到 B 厢破,然后我在next執(zhí)行了一個方法 next({ path: ‘/C’ }) 這樣就會跳轉到C 頁面荣瑟,而不是 B 頁面了,這就是路由攔截了摩泪,如果這么寫的話 不管你愿來是想從 那個頁面 跳轉 那個頁面 他都會給你跳轉到 C 頁面
在這里就可以判斷笆焰,如果滿足一定的條件 就讓他 next({ path: ‘/C’ }) 就是滿足一定的條件 才讓他跳轉到C 不滿足的時候 就正常跳轉
這里next 還有一個作用 next(false) 這樣會中斷路由的跳轉 比如說 點擊按鈕 從 A 跳轉到 B 然后我執(zhí)行了 next(false) 那么瀏覽器就不會進行跳轉 從新回到A頁面 這樣就阻止了路由的跳轉 在這里就可以判斷,如果滿足一定的條件 就讓他 next(false) 這樣就不進行跳轉了
路由獨享守衛(wèi)
顧名思義:就是這個守衛(wèi)见坑,只是單獨的這個組件獨享的嚷掠,局部的,不是全局的荞驴,只有這個路由在進行跳轉的時候不皆,才會觸發(fā)的,其他的組件熊楼,路由進行跳轉的時候不執(zhí)行這個方法
獨享守衛(wèi)有三個方法:
beforeRouteEnter 在渲染該組件的對應路由被 confirm 前調(diào)用 就是頁面跳轉前要執(zhí)行的方法 要干的事
beforeRouteUpdate 在當前路由改變霹娄,但是該組件被復用時調(diào)用 就是當頁面 在A 跳轉到 B 的一瞬間 要干的事
beforeRouteLeave 導航離開該組件的對應路由時調(diào)用 就是在跳轉完成之后 要干的事
這三個方法 都有三個參數(shù) (to, from, next) 跟全局守衛(wèi)的 三個參數(shù)用法一樣
其中 beforeRouteEnter 守衛(wèi) 不能 訪問 this 其他兩個守衛(wèi)可以訪問到this