vue全局路由守卫配置
先摆出 官方文档
Q:路由守卫有何用?
A:路由守卫可以实现许多功能,例如鉴权,登录状态校验,页面显示状态等等...全局配置可极大程度减少工作量,并且极大提高代码维护性...
如何实现?
实现路由守卫主要使用 vue-router
提供的几个钩子函数 router.beforeEach(全局前置守卫)
、router.beforeResolve(全局解析守卫)
、router.afterEach(全局后置钩子)
来实现
参考示例
路由配置
const routes = [
{
path: "/",
name: "home",
component: () => import("@/views/HomeView.vue"),
meta: { isAuth: false, title: "首页" },
},
{
path: "/login",
name: "login",
component: () => import("@/views/account/login"),
meta: { isAuth: false, title: "登录" },
},
{
path: "/center",
name: "center",
component: () => import("@/views/account/center"),
meta: { isAuth: true, title: "个人中心" },
},
];
const router = new VueRouter({
routes,
});
全局前置守卫
// isAuth(是否需要鉴权)
router.beforeEach((to, from, next) => {
// 需要鉴权
var token = userStore.getters.getUserInfo.token; // 获取token
if (to.meta.isAuth) {
if (token) {
console.log('isLogin')
// 已登录,放行
next();
} else {
console.log('not token')
next({ path: "/login" });
}
} else {
console.log('do not isauth')
//不需要鉴权
next();
}
});
全局解析守卫
router.beforeResolve(async to => {
if (to.meta.requiresCamera) {
try {
await askForCameraPermission()
} catch (error) {
if (error instanceof NotAllowedError) {
// ... 处理错误,然后取消导航
return false
} else {
// 意料之外的错误,取消导航并把错误传给全局处理器
throw error
}
}
}
})
全局后置钩子
// 全局后置钩子
router.afterEach(to => {
// 设置站点title
document.title = "FishMailBox - " + to.meta.title;
})
文章目录
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。