路由导航守卫按固定顺序执行:1.全局前置守卫(beforeeach)最先执行,用于统一鉴权;2.路由独享守卫(beforeenter)次之,精准拦截单个路由;3.组件内守卫与beforeresolve穿插执行;4.全局后置守卫(aftereach)最后执行,仅做副作用操作。

路由导航守卫的“优先级”不是指谁更高谁更低,而是指它们在一次完整导航过程中被调用的固定顺序。理解这个顺序,才能准确控制权限判断、数据加载或页面跳转逻辑,避免因执行时机错位导致守卫失效或重复触发。
全局前置守卫(beforeEach)最先执行
这是整个导航流程的第一道关卡,在任何路由匹配和组件实例化之前就运行。它适用于统一鉴权、埋点统计、全局加载状态开启等场景。
- 接收 to(目标路由)、from(来源路由)、next(必须调用)三个参数
- 若未调用
next(),导航会挂起;调用next(false)可中止;next('/login')可重定向 - 常见用途:检查用户是否登录、token 是否过期、是否满足平台访问条件(如 localStorage.school === 'SGG')
路由独享守卫(beforeEnter)紧随其后
它只对当前配置的路由生效,在 beforeEach 之后、组件创建前执行,属于“精准拦截”。适合模块级权限控制,比如仅对 /admin/* 路由做管理员校验。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 定义在单个
routes配置项内,如:{ path: '/admin', component: Admin, beforeEnter: (to, from, next) => { ... } } - 执行时机在
beforeEach完成后、beforeResolve之前,且只对该路由有效 - 注意:它无法访问组件实例,也不参与子路由的复用判断
组件内守卫与解析守卫穿插执行
当路由匹配完成、开始准备渲染组件时,以下守卫按序介入:
-
beforeRouteEnter:组件首次进入前触发,此时
this不可用(组件尚未创建),但可通过next(vm => {...})延迟访问实例 - beforeResolve:在所有组件守卫和异步组件加载完成后执行,是“确认前最后一道检查”,常用于服务端数据预取或权限二次验证
-
beforeRouteUpdate:仅在组件被复用时触发(如
/user/1→/user/2),可用于响应路由参数变化并刷新数据 -
beforeRouteLeave:离开当前组件前触发,
this可用,适合做表单未保存提醒、清理定时器等
全局后置守卫(afterEach)收尾不干预
它在导航完全完成后执行,没有 next 参数,不能改变导航结果,只适合做副作用操作。
- 典型用途:修改页面标题(
document.title = to.meta.title)、上报 PV/UV、关闭 loading 动画 - 参数只有
to和from,不涉及控制流 - 即使前面某守卫调用了
next('/error'),afterEach仍会在最终落地页触发一次










