路由守卫执行顺序为:全局前置守卫(beforeeach)→路由独享守卫(beforeenter)→组件内守卫(beforerouteleave/update/enter)→beforeresolve→全局后置守卫(aftereach),构成严格异步流水线。

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










