2020-09-30路由守衛(wèi)

當(dāng)導(dǎo)航發(fā)生改變的時(shí)候 vue-router 會(huì)在多個(gè)不同的地方調(diào)用指定的函數(shù),也就是與路由有關(guān)的

組件內(nèi)守衛(wèi)

路由獨(dú)享守衛(wèi)

全局守衛(wèi)

組件內(nèi)守衛(wèi) 與路由有關(guān)的生命周期函數(shù)(守衛(wèi))

beforeRouteEnter

beforeRouteUpdate

beforeRouteLeave

當(dāng)路由解析完成,并指定的組件渲染之前(組件`beforCreate`之前),不能這路通過(guò)`this`訪問(wèn)組件實(shí)例,需要通過(guò)`next`回調(diào)來(lái)進(jìn)行調(diào)用

beforeRouteEnter?(to,?from,?next)?{

????//?不!能!獲取組件實(shí)例?`this`

????//?因?yàn)楫?dāng)守衛(wèi)執(zhí)行前,組件實(shí)例還沒(méi)被創(chuàng)建

????next(vm?=>?{

??????//?vm...

????})

}

####?beforeRouteUpdate

在當(dāng)前路由改變,但是該組件被復(fù)用時(shí)調(diào)用

```javascript

beforeRouteUpdate?(to,?from,?next)?{

????//?可以訪問(wèn)組件實(shí)例?`this`

},

```

####?beforeRouteLeave

導(dǎo)航離開該組件的對(duì)應(yīng)路由時(shí)調(diào)用

```javascript

beforeRouteLeave?(to,?from,?next)?{

????//?可以訪問(wèn)組件實(shí)例?`this`

}

```

###?路由守衛(wèi)參數(shù)

####?to

即將要進(jìn)入的目標(biāo)?路由對(duì)象($route)

####?from

當(dāng)前導(dǎo)航正要離開的路由對(duì)象($route)

####?next

路由確認(rèn)回調(diào)函數(shù),類似?<u>Promise</u>?中的?<u>resolve</u>?函數(shù),一定要確保調(diào)用?<u>next</u>?函數(shù),但是后續(xù)的導(dǎo)航行為將依賴?<u>next</u>?方法的調(diào)用參數(shù)

-?**`next()`**?:?進(jìn)行管道中的下一個(gè)鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是?**confirmed**?(確認(rèn)的)

-?**`next(false)`**?:?中斷當(dāng)前的導(dǎo)航。如果瀏覽器的?URL?改變了?(可能是用戶手動(dòng)或者瀏覽器后退按鈕),那么?URL?地址會(huì)重置到?`from`?路由對(duì)應(yīng)的地址

-?**`next('/')?或者?next({?path:?'/'?})`**?:?跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進(jìn)行一個(gè)新的導(dǎo)航

路由獨(dú)享的守衛(wèi)

可以在路由配置上直接定義?`beforeEnter`?守衛(wèi),相對(duì)來(lái)說(shuō),應(yīng)用不多

```javascript

const?router?=?new?VueRouter(

??{?

????routes:?[?

??????{?

????????path:?'/foo',?

????????component:?Foo,?

????????beforeEnter:?(to,?from,?next)?=>?{?

??????????//?...?

????????}

??????}?

????]?

??}

)

```

###?全局守衛(wèi)

全局守衛(wèi)是注冊(cè)在?<u>router</u>?對(duì)象(new?VueRouter({...}))上的

-?beforeEh

-?beforeResolve

-?afterEach

ac

####?beforeEach

當(dāng)一個(gè)導(dǎo)航觸發(fā)時(shí),全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用

```javascript

router.beforeEach((to,?from,?next)?=>?{

??//?...

})

```

####?beforeResolve

在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后被調(diào)用

```javascript

router.beforeResolve((to,?from,?next)?=>?{

??//?...

})

```

####?afterEach

導(dǎo)航被確認(rèn)后調(diào)用

```javascript

router.afterEach((to,?from)?=>?{

??//?...

})

```

>?因?yàn)閷?dǎo)航已經(jīng)被確認(rèn),所以沒(méi)有?`next`

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容