深入使用
导航守卫
路由切换不是'点一下就完事'。权限校验、埋点、离开确认,这些逻辑大多都挂在守卫上。Vue Router 提供的守卫类型比较全,够用,也容易写乱,所以我一般会先分清它们各自的触发时机。
核心参数说明
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();
}
}
}
];

