嵌套路由本质是父子组件的动态渲染关系:父组件提供作为子组件“落点”,子路由通过children配置并相对路径声明,实现布局复用、内容隔离与状态独立;无则子组件无法渲染。

Vue 路由与组件的深度结合,关键在于用好嵌套路由——它不是把多个路由“堆”在一起,而是让组件之间形成清晰的父子关系,布局复用、内容隔离、状态独立,一气呵成。
嵌套路由的本质:父组件提供舞台,子组件负责表演
一个路由配置里的 component 不是静态挂载,而是动态替换对应位置的
- 访问
/user/123→ 匹配父路由,渲染User.vue组件 -
User.vue模板里有<router-view></router-view>→ 子路由才有地方可插 - 再访问
/user/123/profile→ 在 User 组件的<router-view></router-view>中渲染Profile.vue
布局分离:哪些页面该进 Layout,哪些不该?
后台系统里,登录页、404页、维护页这些属于“独立页面”,它们不该被套进侧边栏或顶部导航里;而首页、用户管理、订单列表等属于“内容页”,需要共用 Layout。区分的关键在路由配置层级:
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 独立页面直接配一级路由:
{ path: '/login', component: Login } - 内容页统一走 Layout 路由:
{ path: '/admin', component: Layout, children: [...] } - Layout 组件内只放固定结构(菜单、header、footer)和一个
<router-view></router-view>
多级嵌套实战:从二级到三级不踩坑
嵌套不是越多越好,但三层足够覆盖大多数业务场景(如 /admin/user/list → /admin/user/detail/:id → /admin/user/detail/:id/logs)。配置时注意三个细节:
- 子路由的
path不加斜杠开头,children: [{ path: 'detail/:id', ... }]是对的,'/detail/:id'会变成绝对路径 - 空子路径用于默认展示:
{ path: '', component: UserHome },避免进入 /user 时主内容区空白 - 命名视图解决复杂布局:
components: { default: MainContent, sidebar: UserSidebar },配合<router-view name="sidebar"></router-view>精准投递
组件通信与状态管理:嵌套不等于耦合
子组件不需要主动去读父组件的数据,更不该用 this.$parent。正确方式是:
- 通过
useRoute()获取当前路由参数(如route.params.id) - 用
watch监听route.params变化,触发数据重载 - 共享状态优先走 Pinia store,而不是靠父子 props 层层透传
- 如果确实需要父组件控制子行为(比如刷新列表),用
defineEmits显式声明事件,保持接口清晰
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










