嵌套路由生命周期异常的本质是子路由配置或router-view使用不规范:子路由必须声明在children数组中、path不能以/开头,且必须用<router-view>而非<component :is>承载;keep-alive下created/mounted仅执行一次,应改用activated或路由守卫处理逻辑。

嵌套路由中生命周期冲突,本质是子组件未按预期触发路由钩子,或钩子重复执行。关键不在“冲突”本身,而在于路由配置方式、<router-view>使用是否规范,以及是否误用了缓存机制。
确保子路由正确声明并使用 <router-view>
子组件拿不到 beforeRouteEnter 等钩子,往往是因为没走 Vue Router 的标准渲染流程。
- 必须用
<router-view>承载子组件,不能用<component :is="">或手动挂载 - 父路由组件模板里要显式写
<router-view>,否则子路由无处渲染 - 子路由配置必须写在
children数组里,且path不以/开头(如path: 'user',不是path: '/user')
避免因 keep-alive 导致的钩子不触发
加了 <keep-alive> 后,mounted、created 不会重复执行,但路由独享守卫(如 beforeRouteEnter)仍会每次触发——这是正常行为。若发现“生命周期没反应”,实际可能是:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 组件被缓存,
mounted只执行一次,后续仅触发activated/deactivated - 想在每次进入时刷新数据,应把逻辑移到
beforeRouteEnter或activated中 - 若需强制重载,可配合
key动态变化(如:key="$route.fullPath")
排查钩子重复执行问题
同一个路由钩子执行两次,常见于以下情况:
- 全局守卫和组件内守卫同时写了相同逻辑,比如都在
beforeEach和beforeRouteEnter里调用了接口 - 路由配置中存在重定向(
redirect)或别名(alias),造成导航被解析两次 - 开发环境下热更新(HMR)引发组件重建,导致守卫误触发(上线后通常消失)
- 未正确调用
next(),或多次调用,引发导航异常重试
父子组件生命周期与路由钩子的协作建议
嵌套路由中,父组件和子组件的生命周期是独立的,但路由钩子有明确顺序:
- 父组件的
beforeRouteEnter先于子组件执行 - 子组件离开时,其
beforeRouteLeave在父组件的对应钩子之前触发 - 若需共享状态(如加载中状态、权限判断),推荐在父组件守卫中统一处理,再通过
provide/inject或vuex/pinia传递给子组件


















