登錄頁(yè)的路由守衛(wèi)

? ? ? ?之前在做登陸頁(yè)面時(shí),需要判斷權(quán)限或者登錄狀態(tài)決定用戶能訪問的路由,但是因?yàn)槁酚墒窃跒g覽器地址欄中的,為了避免用戶可以輸入,如果不加以攔截就可以看到本不該看到的頁(yè)面,所以需要使用路由守衛(wèi),在路由發(fā)生變化時(shí)作出相應(yīng)的判斷,判斷用戶是否可以去到他想去往的頁(yè)面的路由。

全局前置守衛(wèi)

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

to 路由對(duì)象,即將進(jìn)入的頁(yè)面的路由信息from 路由對(duì)象,當(dāng)前正要離開頁(yè)面路由信息next 函數(shù),交出控制權(quán)或者中斷導(dǎo)航

next() 交出控制權(quán),執(zhí)行下面的功能

next(false) 中斷當(dāng)前導(dǎo)航,如果url改變了,將會(huì)回退到當(dāng)前頁(yè)面

next(’/’) 跳轉(zhuǎn)到另一個(gè)路由,next可以接收和$router.push()一樣的參數(shù)

當(dāng)使用導(dǎo)航守衛(wèi)時(shí),無論是否通過驗(yàn)證,都要調(diào)用next方法,如果通過校驗(yàn)則執(zhí)行next()

,不通過則重定向或者中斷;如果不調(diào)用,那么整個(gè)路由變化處于掛起狀態(tài),無法渲染任何組件;

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

export default {

template:`...`,

beforeRouteEnter (to,from,next) {

// 在渲染該組件的對(duì)應(yīng)路由前調(diào)用

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

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

},

beforeRouteUpdate (to,from,next) {

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

// 舉例來說,對(duì)于一個(gè)帶有動(dòng)態(tài)參數(shù)的路徑/foo/:id,在/foo/1 和/foo/2 之間跳轉(zhuǎn)的時(shí)候,

// 由于會(huì)渲染同樣的組件,因此組件實(shí)例會(huì)被復(fù)用。而這個(gè)鉤子就會(huì)在這個(gè)情況下被調(diào)用。

// 可以訪問組件實(shí)例`this`

},

beforeRouteLeave (to,from,next) {

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

// 可以訪問組件實(shí)例`this`

?}

}

?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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