vue中的導(dǎo)航守衛(wèi)使用及說明
導(dǎo)航守衛(wèi)
- 作用:對路由進(jìn)行權(quán)限控制
- 分類:全局守衛(wèi)、獨(dú)享守衛(wèi)、組件內(nèi)守衛(wèi)
全局守衛(wèi)
const router = new VueRouter({
routes: [
{
path: '/home',
component: Home,
meta: { isAuth: false }, // 不需要進(jìn)行權(quán)限控制
},
{
path: '/user',
component: User,
meta: { isAuth: true }, // 需要進(jìn)行權(quán)限控制
},
]
})
// 全局前置守衛(wèi):初始化時(shí)執(zhí)行/每次路由切換前執(zhí)行
router.beforeEach((to,from,next) => {
if(to.meta.isAuth) { // 判斷當(dāng)前路由是否需要進(jìn)行權(quán)限控制(在需要進(jìn)行權(quán)限控制的路由中配置isAuth屬性)
if(localStorage.getItem('xxx') === 'xxx') { // 權(quán)限控制的具體規(guī)則
next(); // 放行
}else {
...
}
} else { // 當(dāng)前路由不需要進(jìn)行權(quán)限控制
next(); // 直接放行
}
})
// 全局后置守衛(wèi):初始化時(shí)執(zhí)行,每次路由切換后執(zhí)行
router.afterEach((to,from) => {
if(to.meta.title) {
document.title = to.meta.title; // 修改網(wǎng)頁的title
}else {
document.title = 'xxx';
}
})
獨(dú)享守衛(wèi)
加在某個(gè)路由的配置中
beforeEnter((to,from,next) => {
? if(to.meta.isAuth) { ?// 判斷當(dāng)前路由是否需要進(jìn)行權(quán)限控制(在需要進(jìn)行權(quán)限控制的路由中配置isAuth屬性)
? ? if(localStorage.getItem('xxx') === 'xxx') { // 權(quán)限控制的具體規(guī)則
? ? ? next(); ? // 放行
? ? }else {
? ? ? ...
? ? }
? } else { ?// 當(dāng)前路由不需要進(jìn)行權(quán)限控制
? ? next(); // 直接放行
? }
})組件內(nèi)守衛(wèi)
// 進(jìn)入守衛(wèi),通過路由規(guī)則,進(jìn)入該組件時(shí)被調(diào)用
beforeRouteEnter(to,from,next){
...
}
// 當(dāng)前路由改變,但是該組件被復(fù)用時(shí)調(diào)用
// 舉例來說,對于一個(gè)帶有動(dòng)態(tài)參數(shù)的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉(zhuǎn)的時(shí)候,
// 由于會(huì)渲染同樣的 Foo 組件,組件實(shí)例會(huì)被復(fù)用。而這個(gè)鉤子就會(huì)被調(diào)用
beforeRouteUpdate(to,from,next{
...
}
// 離開守衛(wèi),通過路由規(guī)則,離開該組件時(shí)被調(diào)用
beforeRouteLeave(to,from,next){
...
}
vue導(dǎo)航守衛(wèi)有哪些
路由的鉤子函數(shù)有六個(gè)
- 全局的路由鉤子函數(shù):beforeEach、afterEach
- 單個(gè)路由的鉤子函數(shù):beforeEnter
- 組件內(nèi)路由鉤子函數(shù):beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave
全局路由鉤子函數(shù)
1、全局前置守衛(wèi): beforeEach(to, from, next)
router.beforeEach: 在每次每一個(gè)路由改變的時(shí)候都會(huì)執(zhí)行一遍
to:將要進(jìn)入的路由對象from: 當(dāng)前正要離開的路由對象next
next(),進(jìn)入下一個(gè)路由,必須調(diào)用,不然不會(huì)跳轉(zhuǎn)
next(false): 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了 (可能是用戶手動(dòng)或者瀏覽器后退按鈕),那么 URL 地址會(huì)重置到 from 路由對應(yīng)的地址。
next(’/’) 或者 next({ paht:’/’}):跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前的導(dǎo)航會(huì)被中斷,然后進(jìn)行一個(gè)新的導(dǎo)航。可傳遞的參數(shù)可以是 router-link 標(biāo)簽中的 to 屬性參數(shù)或 router.push 中的選項(xiàng)
應(yīng)用場景:可進(jìn)行一些頁面跳轉(zhuǎn)前處理,例如判斷需要登錄的頁面進(jìn)行攔截,做登錄跳轉(zhuǎn), 還有管理員權(quán)限判斷。
2、全局后置守衛(wèi):afterEach(to, from)
router.afterEach: 和 beforeEach 相反,它是在路由跳轉(zhuǎn)完成后觸發(fā),它發(fā)生在 beforeEach 之后 beforeRouteEnter(組件內(nèi)守衛(wèi)) 之前, 因?yàn)槭翘D(zhuǎn)完成后觸發(fā),所以沒有 next 參數(shù)。
路由內(nèi)的鉤子函數(shù)
路由獨(dú)享守衛(wèi):beforeEnter(to, from, next)
和 beforeEach 完全相同,如果兩個(gè)都設(shè)置了,beforeEnter 則在 beforeEach 之后緊隨執(zhí)行。在路由配置上直接定義 beforeEnter 守衛(wèi)
組件內(nèi)的鉤子函數(shù)
是指在組件內(nèi)執(zhí)行的鉤子函數(shù),類似于組件內(nèi)的生命周期
- 組件前置守衛(wèi) beforeRouteEnter: 該鉤子在全局守衛(wèi) beforeEach 和獨(dú)享守衛(wèi) beforeEnter 之后。
- 組件更新守衛(wèi) beforeRouteUpdate:在當(dāng)前路由改變時(shí),并且該組件被復(fù)用時(shí)調(diào)用。
- 組件離開守衛(wèi) beforeRouteLeave:導(dǎo)航離開該組件的對應(yīng)路由時(shí)調(diào)用
const Foo = {
template: `...`,
beforeRouteEnter (to, from, next) {
// 在渲染該組件的對應(yīng)路由被 confirm 前調(diào)用
// 不!能!獲取組件實(shí)例 `this`
// 因?yàn)楫?dāng)鉤子執(zhí)行前,組件實(shí)例還沒被創(chuàng)建
},
beforeRouteUpdate (to, from, next) {
// 在當(dāng)前路由改變,但是該組件被復(fù)用時(shí)調(diào)用
// 舉例來說,對于一個(gè)帶有動(dòng)態(tài)參數(shù)的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉(zhuǎn)的時(shí)候,
// 由于會(huì)渲染同樣的 Foo 組件,因此組件實(shí)例會(huì)被復(fù)用。而這個(gè)鉤子就會(huì)在這個(gè)情況下被調(diào)用。
// 可以訪問組件實(shí)例 `this`
},
beforeRouteLeave (to, from, next) {
// 導(dǎo)航離開該組件的對應(yīng)路由時(shí)調(diào)用
// 可以訪問組件實(shí)例 `this`
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于uniapp的高級表單組件mosowe-form
這篇文章主要介紹了關(guān)于uniapp的高級表單組件mosowe-form,由于一些表單標(biāo)簽改來改去比較繁瑣,重復(fù)性很多,且樣式布局啥的幾乎萬變不離其中,為了偷懶,開發(fā)了mosowe-form及mosowe-table兩款高級組件,需要的朋友可以參考下2023-04-04
vue中PC端地址跳轉(zhuǎn)移動(dòng)端的操作方法
最近小編接到一個(gè)項(xiàng)目pc端和移動(dòng)端是兩個(gè)獨(dú)立的項(xiàng)目,兩個(gè)項(xiàng)目項(xiàng)目中的內(nèi)容基本相同,鏈接組合的方式都有規(guī)律可循,接到的需求便是在移動(dòng)端訪問pc端的URL連接時(shí),重定向至移動(dòng)端對應(yīng)頁面,下面小編給大家分享實(shí)現(xiàn)過程,一起看看吧2021-11-11
Vue+Express實(shí)現(xiàn)登錄狀態(tài)權(quán)限驗(yàn)證的示例代碼
這篇文章主要介紹了Vue+Express實(shí)現(xiàn)登錄狀態(tài)權(quán)限驗(yàn)證的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
Vue/React子組件實(shí)例暴露方法(TypeScript)
最近幾個(gè)月都在用TS開發(fā)各種項(xiàng)目,框架有涉及到Vue3,React18等,記錄一下Vue/React組件暴露出變量/函數(shù)的方法的寫法,對vue?react組件暴露方法相關(guān)知識感興趣的朋友跟隨小編一起看看吧2022-11-11

