在Vue中,引入路由的功能后,我們可以使用Vue Router來快速建立起一個(gè)簡單的SPA應(yīng)用程序。 SPA應(yīng)用程序,前端路由就顯得尤為重要,因此Vue Router就成了開發(fā)Vue應(yīng)用最為重要的一部分之一。在Vue Router的使用過程中,很多時(shí)候都需要進(jìn)行權(quán)限判斷,比如在訪問某些內(nèi)容前,需要先進(jìn)行身份認(rèn)證。這時(shí)候我們就需要進(jìn)行路由權(quán)限判斷,本文主要介紹Vue Router的權(quán)限判斷。
首先,我們需要了解Vue Router怎么進(jìn)行路由跳轉(zhuǎn)。在Vue Router中,我們可以使用router-link標(biāo)簽進(jìn)行跳轉(zhuǎn):
<router-link to="/">Home</router-link>,也可以使用編程式導(dǎo)航進(jìn)行跳轉(zhuǎn)
this.$router.push('/'),其中to和push是路由的路徑。
當(dāng)我們需要進(jìn)行權(quán)限判斷時(shí),可以像下面代碼一樣,在進(jìn)行路由跳轉(zhuǎn)前進(jìn)行判斷:
if(需要判斷的條件){ next() }else{ next('/') }
其中next()表示繼續(xù)進(jìn)行路由跳轉(zhuǎn),next('/login')表示跳轉(zhuǎn)到登錄頁面,這里僅做示例,實(shí)際開發(fā)中很可能會(huì)進(jìn)行更多的操作。
對(duì)于路由跳轉(zhuǎn)的權(quán)限判斷,開發(fā)者可以根據(jù)實(shí)際需求自行改變,但我們也可以使用路由元數(shù)據(jù)來進(jìn)行更加方便的權(quán)限判斷。在我們定義路由時(shí),可以在meta對(duì)象中添加我們需要的元數(shù)據(jù)信息。
const routes = [ { path: "/", name: "Home", component: Home, meta: { requiresAuth: true } }, ];
在路由定義中,我們添加了一個(gè)元數(shù)據(jù)requiresAuth,表示這個(gè)路由需要進(jìn)行身份認(rèn)證后才能進(jìn)行訪問,接下來我們?cè)诼酚商D(zhuǎn)時(shí)就可以輕松進(jìn)行權(quán)限判斷了。
router.beforeEach((to, from, next) =>{ if (to.matched.some((route) =>route.meta.requiresAuth)) { if (store.getters.isLoggedIn) { next(); } else { next("/login"); } } else { next(); } });
在這段代碼中,我們使用了Vue Router的全局前置守衛(wèi)beforeEach,這個(gè)守衛(wèi)可以攔截所有路由跳轉(zhuǎn),在執(zhí)行跳轉(zhuǎn)前進(jìn)行權(quán)限判斷,判斷元數(shù)據(jù)中是否有requiresAuth屬性,如果有這個(gè)屬性,則需要進(jìn)行身份認(rèn)證,否則直接進(jìn)行跳轉(zhuǎn)。
需要注意的是,上述代碼中的isLoggedIn是Vuex中的一個(gè)狀態(tài),我們需要在登錄成功后將這個(gè)狀態(tài)置為true,表示用戶已經(jīng)登錄過了,這樣的話我們才能順利進(jìn)行需要身份認(rèn)證的路由跳轉(zhuǎn)。
總結(jié)一下,針對(duì)Vue開發(fā)應(yīng)用中路由的權(quán)限判斷,我們可以在路由定義中添加元數(shù)據(jù)進(jìn)行權(quán)限控制,使用Vue Router的全局前置守衛(wèi)beforeEach進(jìn)行攔截和跳轉(zhuǎn),同時(shí)還需要配以Vuex中的狀態(tài)來進(jìn)行判斷。