beforeEach是Vue.js中的一個(gè)路由守衛(wèi),它的主要作用是在路由每次跳轉(zhuǎn)前,執(zhí)行一段預(yù)定義的代碼。
舉個(gè)例子,假設(shè)有一個(gè)需求是讓用戶在進(jìn)入某些頁(yè)面之前,必須確認(rèn)自己是否已經(jīng)登錄。那么在這種情況下,我們可以通過(guò)beforeEach來(lái)實(shí)現(xiàn)該功能。
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!auth.loggedIn()) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
}
}
next() // 確保一定要調(diào)用 next()
})
在上面的代碼中,我們首先通過(guò)router.beforeEach注冊(cè)了一個(gè)回調(diào)函數(shù),該函數(shù)會(huì)在每次路由跳轉(zhuǎn)前都被執(zhí)行。在該函數(shù)內(nèi)部,我們首先判斷當(dāng)前跳轉(zhuǎn)的路由是否需要進(jìn)行登錄認(rèn)證(即是否包含requiresAuth的meta屬性),如果需要登錄認(rèn)證,那么我們就判斷當(dāng)前用戶是否已經(jīng)登錄,如果沒(méi)有登錄,我們就讓它跳轉(zhuǎn)到登錄頁(yè)面,并且在跳轉(zhuǎn)后,將原先要訪問(wèn)的頁(yè)面路徑(即to.fullPath)存入query屬性中,方便在登錄后能夠跳回原先要訪問(wèn)的頁(yè)面。最后,在跳轉(zhuǎn)的頁(yè)面上,一定要記得調(diào)用next()函數(shù),否則路由將無(wú)法繼續(xù)跳轉(zhuǎn)。
總之,beforeEach是一個(gè)很有用的路由守衛(wèi),能夠幫助我們?cè)诿看温酚商D(zhuǎn)前執(zhí)行一些預(yù)定義的代碼,從而實(shí)現(xiàn)一些非常實(shí)用的功能。