深入使用
导航守卫
在路由跳转前、跳转后或解析过程中,我们往往需要插入自定义逻辑,比如权限验证或页面埋点。理解 to(目标路由)、from(当前离开的路由)和 next(控制函数)是掌握守卫的关键。
- next():继续执行路由。
- next(false):中断当前导航,如果浏览器 URL 已改变,则回退到
from路由。 - next('/path'):跳转到指定路径。
- next(error):将控制权交给
router.onError()。
组件内守卫
当路由进入特定组件时,可以在组件内部定义生命周期钩子:
export default {
beforeRouteEnter(to, from, next) {
// 在路由进入前调用,此时组件实例尚未创建
next();
},
beforeRouteUpdate(to, from, next) {
// 在当前路由改变但组件复用时调用
next();
},
beforeRouteLeave(to, from, next) {
// 在路由离开前调用
next();
}
};
路由独享守卫
直接在路由配置中定义,适用于单个路由的独立逻辑:
const routes = [
{
path: '/admin',
component: Admin,
beforeEnter: (to, from, next) => {
if (isAdmin()) {
next();
} else {
next('/login');
}
}
}
];
全局守卫
全局前置守卫 beforeEach 是最常用的入口,适合做登录态校验;后置钩子 不接收 ,常用于统计或日志记录;而 在所有组件内守卫和异步路由解析完成后调用,适合处理最终权限确认。


