如果你使用 Vue,你可能已經知道它的路由功能非常強大。但是,有時我們需要單獨對某些路由進行攔截,例如檢查用戶是否已經登錄。在這種情況下,Vue提供了一個簡單且容易實現的解決方案:使用單獨路由攔截。
const router = new VueRouter({
routes: [
{
path: '/',
component: Home,
meta: { requiresAuth: true }
},
{
path: '/login',
component: Login
}
]
})
在上面的代碼中,我們定義了兩個路由:'/'和'/login'。但是,注意到在'/'路由定義中,我們添加了一個meta字段,該字段設置了屬性requiresAuth為true。
現在,在路由切換時,我們可以使用路由守衛來攔截該特定路由,并檢查用戶是否具有權限。
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!auth.loggedIn()) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
} else {
next()
}
})
在上面的代碼中,我們使用了router.beforeEach()方法來添加路由守衛。對于每個要訪問的路由都可以使用該方法。在這個守衛中,我們檢查即將訪問的路由是否設置了requiresAuth為true。如果是這樣,我們調用auth.loggedIn()方法來檢查用戶是否已經登錄。如果用戶未登錄,我們將重定向用戶到登錄頁面,并將當前路徑添加到查詢參數中,以便登錄后可以返回到之前的位置。如果用戶已經登錄,則直接next()調用。
如果路由沒有設置requiresAuth屬性,則不需要攔截該路由,直接調用next()即可。
我們也可以使用router.afterEach()方法來添加一個后置鉤子函數。此函數將在路由切換后調用。
router.afterEach((to, from) => {
// Do something after each router change
})
在實際應用中,我們可以使用單獨路由攔截來檢查用戶權限,檢查表單數據或者其他需要攔截的情況。當然,該方法只是Vue路由的一小部分。Vue路由還有許多其他功能,如命名路由、動態路由、路由嵌套等。在使用Veu時,我們可以根據需要選擇使用這些功能。
上一篇vue動畫輪播效果