Vue導(dǎo)航守衛(wèi)使用教程詳解
作用:通過跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航
植入方式:
- 全局守衛(wèi)
- 單個路由獨(dú)享守衛(wèi)
- 組件級守衛(wèi)
守衛(wèi)參數(shù)
- to: 即將要進(jìn)入的目標(biāo)路由
- from: 當(dāng)前導(dǎo)航即將要離開的路由
- next(可選): 不傳參默認(rèn)去to路由,傳參可改變目標(biāo)路由
注意:可以向任意給定的導(dǎo)航守衛(wèi)傳遞next,但是next的使用過程容易出錯,需要確保next在任何給定的導(dǎo)航守衛(wèi)中都被嚴(yán)格調(diào)用一次。(可以出現(xiàn)多于一次,但是只能在所有邏輯路徑都不重疊的情況,否則鉤子永遠(yuǎn)不會被解析或者報錯)
守衛(wèi)返回值
- false: 取消當(dāng)前導(dǎo)航
- 路由地址:導(dǎo)航中斷,跳轉(zhuǎn)到返回的路由地址。(例如:return {name:‘login’}跳轉(zhuǎn)到登陸頁)
- undefined/true: 導(dǎo)航有效,調(diào)用下一個導(dǎo)航守衛(wèi)
- 注意:如果有錯誤,會取消導(dǎo)航并調(diào)用router.onError()
全局守衛(wèi)
全局前置守衛(wèi)
const router = createRouter({...})
router.beforeEach((to, from) => {
})
- 導(dǎo)航觸發(fā)時,全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用
- 守衛(wèi)是異步解析執(zhí)行,導(dǎo)航在所有守衛(wèi)resolve完之前一直處于等待
全局解析守衛(wèi)
router.beforeResolve(async to => {
})
- 在導(dǎo)航被確認(rèn)之前,在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后調(diào)用
- 是獲取數(shù)據(jù)或避免用戶無法進(jìn)入頁面時執(zhí)行操作的理想位置
全局后置鉤子
router.afterEach((to, from) => {
})
- 和守衛(wèi)的區(qū)別:不會接收next函數(shù),也不會改變導(dǎo)航
- 作用:分析/更改頁面標(biāo)題,聲明頁面等
單個路由獨(dú)享守衛(wèi)
const routes = [{
path: '/users/:id',
component: UserDetails,
beforeEnter: (to, from) => {
},
// beforeEnter: [removeQuery, removeHash]
}]
- 只在進(jìn)入路由時觸發(fā),不會在params/query/hash改變時觸發(fā)(如:/user/1 -> /user/2)
- 傳參:可以傳遞函數(shù)數(shù)組,有利于重用守衛(wèi)
組件級守衛(wèi)
- beforeRouteEnter: 在渲染該組件對應(yīng)路由被驗(yàn)證前調(diào)用,不能獲取this
- beforeRouteUpdate: 在組件被復(fù)用時調(diào)用,可以訪問this
- beforeRouteLeave: 在導(dǎo)航離開該組件路由時調(diào)用,可以訪問this
注意:beforeRouteEnter 是支持給 next 傳遞回調(diào)的唯一守衛(wèi)
beforeRouteEnter(to, from, next) {
next(vm => {
// 通過'vm'訪問組件實(shí)例
})
}
離開守衛(wèi):通常用來預(yù)防用戶在還未保存修改前突然離開,可以通過返回false來取消
完整的導(dǎo)航解析流程
- 導(dǎo)航被觸發(fā)
- 在離開的組件里調(diào)用 beforeRouteLeave 守衛(wèi)
- 調(diào)用全局的 beforeEach 守衛(wèi)
- (如果是重用組件)調(diào)用 beforeRouteUpdate 守衛(wèi)
- 在路由配置里調(diào)用 beforeEnter
- 解析異步路由組件
- 在被激活的組件里調(diào)用 beforeRouteEnter
- 調(diào)用全局的 beforeResolve 守衛(wèi)
- 導(dǎo)航被確認(rèn)
- 調(diào)用全局的 afterEach 鉤子
- 觸發(fā) DOM 更新
- 調(diào)用 beforeRouteEnter 守衛(wèi)中傳給 next 的回調(diào)函數(shù),創(chuàng)建好的組件實(shí)例會作為回調(diào)函數(shù)的參數(shù)傳入
總結(jié)
全局守衛(wèi)
- beforeEach
- beforeResolve
- beforeAfter:不接收next
單個路由獨(dú)享守衛(wèi)
- beforeEnter:路由參數(shù)變化不觸發(fā)
組件級守衛(wèi)
- beforeRouteEnter: 不可訪問this
- beforeRouteUpdate:可以訪問this
- beforeRouteLeave:可以訪問this
到此這篇關(guān)于Vue導(dǎo)航守衛(wèi)使用教程詳解的文章就介紹到這了,更多相關(guān)Vue導(dǎo)航守衛(wèi)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue自定義switch開關(guān)組件,實(shí)現(xiàn)樣式可自行更改
今天小編就為大家分享一篇vue自定義switch開關(guān)組件,實(shí)現(xiàn)樣式可自行更改,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue input標(biāo)簽通用指令校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了vue input標(biāo)簽通用指令校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路詳解
這篇文章主要給大家介紹了關(guān)于vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-02-02
vue獲取路由詳細(xì)內(nèi)容信息方法實(shí)例
獲取路由詳細(xì)內(nèi)容信息是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的需求,下面這篇文章主要給大家介紹了關(guān)于vue獲取路由詳細(xì)內(nèi)容信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Vue實(shí)施重新發(fā)布和軟件熱更新的經(jīng)驗(yàn)分享
在Web應(yīng)用的開發(fā)周期中,版本管理和軟件熱更新是一個不可或缺的話題,隨著Vue.js框架的流行,越來越多的應(yīng)用程序選擇使用Vue來構(gòu)建前端,本文將探討在Vue應(yīng)用中實(shí)施重新發(fā)布和熱更新的最佳實(shí)踐,需要的朋友可以參考下2024-09-09
在vue中v-for循環(huán)遍歷圖片不顯示錯誤的解決方案
這篇文章主要介紹了在vue中v-for循環(huán)遍歷圖片不顯示錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
有關(guān)vue 組件切換,動態(tài)組件,組件緩存
這篇文章主要介紹了有關(guān)vue 組件切換,動態(tài)組件,組件緩存,在組件化開發(fā)模式下,我們會把整個項目拆分成很多組件,然后按照合理的方式組織起來,達(dá)到預(yù)期效果,下面來看看文章的詳細(xì)內(nèi)容2021-11-11

