在Vue开发中,路由管理是构建单页应用(SPA)的核心环节,而“路由下的路由”,即嵌套路由,则是处理多级页面结构的重要技术,通过嵌套路由,我们可以在一个父路由下再定义多个子路由,实现页面中局部区域的动态切换,既保持了整体页面的稳定性,又提升了代码的可维护性和复用性。

什么是嵌套路由?
嵌套路由(Nested Routes)指的是在Vue Router中,将一个或多个子路由配置在父路由之下,形成层级化的路由结构,当访问父路由时,其对应的父组件中会包含一个<router-view>组件,用于渲染匹配的子路由组件,这种模式特别适合处理具有“主内容区+局部导航”的页面,例如后台管理系统的左侧菜单与右侧内容联动、电商网站的商品详情页与规格选择页等。
为什么需要嵌套路由?
- 代码复用与结构清晰:公共组件(如页面头部、底部、侧边栏)可在父组件中复用,子路由只需关注局部内容的动态切换,避免重复编写布局代码。
- 符合业务逻辑:多级页面(如“首页-新闻详情-评论”)天然具有层级关系,嵌套路由能直观映射这种结构,让路由配置与业务场景一一对应。
- 用户体验优化:无需整体页面刷新,仅局部更新内容,提升页面切换流畅度。
如何实现嵌套路由?
父组件与路由出口
在父组件中定义一个<router-view>作为“路由出口”,用于渲染子路由组件,后台管理系统的父组件Layout.vue可能包含顶部导航和左侧菜单,右侧主内容区则通过<router-view>渲染子组件:
<!-- Layout.vue -->
<template>
<div class="layout">
<header>后台管理系统</header>
<div class="content">
<aside>菜单栏</aside>
<main>
<router-view /> <!-- 子路由出口 -->
</main>
</div>
</div>
</template>
路由配置中的children字段
在路由配置文件(如router.js)中,通过父路由的children属性定义子路由,子路由的路径会自动拼接父路由路径,形成最终访问路径,配置“用户管理”下的“用户列表”和“用户详情”子路由:

// router.js
import { createRouter, createWebHistory } from 'vue-router'
import Layout from '../views/Layout.vue'
import UserList from '../views/user/UserList.vue'
import UserDetail from '../views/user/UserDetail.vue'
const routes = [
{
path: '/admin',
component: Layout, // 父组件
children: [ // 子路由配置
{
path: 'user', // 子路由路径,最终路径为 /admin/user
component: UserList
},
{
path: 'user/:id', // 动态路径,最终路径为 /admin/user/xxx
component: UserDetail
}
]
}
]
子路由的默认展示与重定向
若希望访问父路由时默认显示某个子路由,可通过redirect配置默认重定向,访问/admin时自动跳转到/admin/user:
{
path: '/admin',
component: Layout,
children: [
{
path: '', // 空路径表示父路由本身
redirect: 'user' // 重定向到子路由
},
// ...其他子路由
]
}
嵌套层级与动态参数
嵌套路由支持多层级嵌套,用户列表-用户详情-编辑页面”可形成三级路由,子路由可直接使用父路由的动态参数,无需重复定义。/admin/user/:id的子路由/admin/user/:id/edit可直接复用id参数。
实际应用场景
- 后台管理系统:左侧菜单为父路由导航,右侧内容区为子路由出口,点击菜单切换不同功能模块(如用户、订单、设置)。
- 电商网站:商品列表页为父路由,商品详情页为子路由,详情页下再嵌套“评价”“规格”等子页面。
- 多步骤表单:表单填写页为父路由,每一步骤(如信息填写、支付确认)为子路由,通过路由参数记录步骤进度。
注意事项
- 路径拼接规则:子路由路径以开头表示绝对路径(不推荐,会覆盖父路由路径),否则为相对路径(自动拼接父路由路径)。
- 避免过度嵌套:嵌套层级过深会增加路由复杂度,建议不超过3层,必要时可通过扁平化路由+参数传递优化。
- 懒加载优化:子路由组件可通过
() => import('./Child.vue')实现懒加载,减少首屏加载时间。
FAQs
Q1:嵌套路由中,子路由路径为什么有时需要加,有时不需要?
A:子路由路径是否加会影响最终拼接结果,不加时,子路由路径会相对于父路由拼接(如父路由/admin,子路由user→最终路径/admin/user);加时,子路由路径会覆盖父路由路径(如父路由/admin,子路由/user→最终路径/user),通常推荐不加,保持路径层级清晰。

Q2:如何在嵌套路由中传递多个动态参数?
A:可通过以下两种方式实现:
- 路径参数:在子路由路径中定义多个参数,如
/admin/:type/:id,访问时传递/admin/user/123,组件中通过route.params.type和route.params.id获取。 - 查询参数:在跳转时通过
router.push({ path: '/admin/user', query: { page: 1, size: 10 } })传递,组件中通过route.query.page获取,适合非必需参数。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/280523.html