路由守衛(wèi)分為三種 ——分別是:全局路由守衛(wèi)巩检、組件路由守衛(wèi)厚骗、獨(dú)享路由守衛(wèi)。
一.全局守衛(wèi)
全局守衛(wèi)又分為全局前置守衛(wèi)兢哭、和后置守衛(wèi)
全局鉤子: beforeEach领舰、 afterEach
組件內(nèi)守衛(wèi):beforeRouteEnter、 beforeRouteUpdate迟螺、 beforeRouteLeave
獨(dú)享守衛(wèi)(單個路由里面的鉤子): beforeEnter冲秽、 beforeLeave
1. router.beforeEach((to,from,next)=>{})
? ? ? ? 回調(diào)函數(shù)中的參數(shù),to:進(jìn)入到哪個路由去矩父,from:從哪個路由離開锉桑,next:函數(shù),決定是否展示你要看到的路由頁面窍株。
? ? ? ? 從名字全局前置守衛(wèi)不難理解民轴,它是全局的攻柠,即對 整個單頁應(yīng)用(SPA) 中的所有路由都生效,所以當(dāng)定義了全局的前置守衛(wèi)杉武,在進(jìn)入每一個路由之前都會調(diào)用這個回調(diào)辙诞,那么如果你在回調(diào)中對路由的跳轉(zhuǎn)條件判斷出錯,簡單點(diǎn)就是死循環(huán)…因為你遺漏了某種路由跳轉(zhuǎn)的情況轻抱,守衛(wèi)會一直執(zhí)行飞涂。所以在使用全局前置守衛(wèi)的時候一定要判斷清楚可能會出現(xiàn)的路由跳轉(zhuǎn)的情況。
2.router.afterEach((to, from) => {})
? ? ? ? 只有兩個參數(shù)祈搜,to:進(jìn)入到哪個路由去较店,from:從哪個路由離。
? ? ? ? 理解了全局前置守衛(wèi)容燕,那么全局后置守衛(wèi)也就那么一回事梁呈。全局后置守衛(wèi)是整個單頁應(yīng)用中每一次路由跳轉(zhuǎn)后都會執(zhí)行其中的回調(diào)。所以多用于路由跳轉(zhuǎn)后的相應(yīng)頁面操作蘸秘,并不像全局前置守衛(wèi)那樣會在回調(diào)中進(jìn)行頁面的重定向或跳轉(zhuǎn)官卡。
二.組件內(nèi)的守衛(wèi)
組件路由守衛(wèi)分為到達(dá)這個組件時,離開這個組件時
1. beforeRouteEnter:(to,from,next)=>{}——到達(dá)
? ? ? ? to醋虏,from參數(shù)與上面使用方法一致寻咒。next回調(diào)函數(shù)略有不同。
2. beforeRouteLeave:(to,from,next)=>{}——離開
? ? ? ? 點(diǎn)擊其他組件時颈嚼,判斷是否確認(rèn)離開毛秘。確認(rèn)執(zhí)行next();取消執(zhí)行next(false)阻课,留在當(dāng)前頁面叫挟。
三.路由獨(dú)享的守衛(wèi)
1. beforeEnter:(to,from,next)=>{}
? ? ? ? 與全局路由守衛(wèi)用法一致,但是只能針對一個頁面使用