当前位置: 首页 > news >正文

如何用router-view实现嵌套路由,完整使用示例

在 Vue.js 中使用 <router-view> 实现 嵌套路由 的核心思路是:通过 children 属性定义子路由,并在父组件中使用 <router-view> 作为子路由的挂载点。以下是完整的使用示例及详细解释:


✅ 核心概念

  1. 父路由:顶层路由(如 /user
  2. 子路由:隶属于父路由的二级路由(如 /user/profile, /user/settings
  3. <router-view>:动态渲染匹配当前 URL 的组件
  4. 路径拼接规则:子路由的 path 是相对于父路由的路径追加的

📁 项目结构示例

src/
├── router/               # 路由配置文件
│   └── index.js          # 主路由文件
├── views/                # 视图组件目录
│   ├── UserLayout.vue    # 父级布局组件 (含 <router-view>)
│   │   ├── components/   # 子组件存放位置
│   │   │   ├── Profile.vue
│   │   │   └── Settings.vue
│   └── Home.vue          # 其他独立页面
└── App.vue               # 根组件

🔧 Step 1: 配置路由 (router/index.js)

import { createRouter, createWebHistory } from 'vue-router';
// 引入组件
import Home from '../views/Home.vue';
import UserLayout from '../views/UserLayout.vue';
import Profile from '../views/UserLayout/components/Profile.vue';
import Settings from '../views/UserLayout/components/Settings.vue';const routes = [{path: '/',name: 'Home',component: Home},{path: '/user',             // 父路由路径component: UserLayout,     // 父级布局组件children: [                // 子路由列表{path: 'profile',       // 完整路径变为 /user/profilename: 'UserProfile',component: Profile},{path: 'settings',      // 完整路径变为 /user/settingsname: 'UserSettings',component: Settings}]}
];const router = createRouter({history: createWebHistory(),routes
});export default router;

🎨 Step 2: 创建父级布局组件 (views/UserLayout.vue)

此组件负责整体布局,内部包含一个 <router-view> 用于显示子路由内容。

<template><div class="user-container"><!-- 导航菜单 --><nav><router-link to="/user/profile">个人资料</router-link> |<router-link to="/user/settings">账户设置</router-link></nav><!-- 子路由出口 --><router-view></router-view>  <!-- 就是这里! --></div>
</template><script>
export default {name: 'UserLayout'
};
</script>

📝 Step 3: 创建子组件 (views/UserLayout/components/*.vue)

Profile.vue 示例:

<template><div><h2>个人资料页</h2><p>这里是用户的详细信息...</p></div>
</template>

Settings.vue 示例:

<template><div><h2>账户设置</h2><p>修改密码、通知偏好等...</p></div>
</template>

🖥️ Step 4: 根组件 App.vue

只需一个简单的 <router-view>

<template><div id="app"><router-view></router-view> <!-- 整个应用的入口 --></div>
</template>

🚀 运行效果说明

URL显示内容备注
/Home 组件默认首页
/user/profileUserLayout + Profile 组件父布局 + 子组件
/user/settingsUserLayout + Settings 组件父布局 + 另一个子组件

⚠️ 常见问题解决

Q1: 为什么子路由没生效?

  • 确保父路由的 component 指向的组件中确实有 <router-view>
  • 检查子路由的 path 是否与父路由形成正确层级(不要加多余的 /

Q2: 如何访问子路由?

  • 方式一:直接输入 URL(如 /user/profile
  • 方式二:使用 <router-link> 生成链接(已在示例中实现)

Q3: 如何在子路由中获取参数?

若需动态参数,可改为:

children: [{ path: 'detail/:id', component: UserDetail }
]

然后在组件中通过 this.$route.params.id 获取


📚 进阶技巧

  1. 重定向:可在父路由添加 redirect: 'profile' 使 /user 自动跳转到 /user/profile
  2. 懒加载:使用动态导入优化性能:
    const Profile = () => import('../views/UserLayout/components/Profile.vue');
    
  3. 嵌套多层:支持无限层级嵌套,只需继续添加 children 属性

📌 总结

要素作用示例值
path路由匹配路径'user', 'profile'
component匹配成功时加载的组件UserLayout
children定义子路由[{ path: 'profile', ...}]
<router-view>子路由的渲染容器放在父组件模板中
<router-link>生成路由链接<router-link to="/user/profile">

通过这种方式,你可以构建出清晰的多级路由结构,适用于后台管理系统、电商详情页等复杂场景。

http://www.dtcms.com/a/520568.html

相关文章:

  • 深度学习 GPU 两种使用方法
  • 基于机器学习的基金股票预测:从数据到决策
  • 聊城网站制作需要多少钱企业网站的建设水平直接关系到网络营销的效果
  • 北京冬奥会网站制作素材做公司网站需要学哪些
  • 网站域名后缀意义设计好的建设网站
  • 如何刷网站访问量wordpress倒序阅读
  • 秦皇岛公司做网站服装设计公司有哪些
  • AAA的配置
  • 如何做论坛网站 知乎网站服务器安全配置
  • 邯郸整站优化项目设计方案模板
  • Spring Boot Bean 加载机制完全解析:从基础到高级实践
  • Spring Boot快速集成MiniMax、CosyVoice实现文本转语音
  • 力扣101.对称二叉树(java)
  • Spring Boot构建RESTful服务与Actuator监控
  • 【Spring Boot】深入浅出Spring Boot中的控制反转与依赖注入
  • 去年做那个网站致富商业网站在规划与设计时应着重考虑哪些因素
  • 苏州网站建设 凡仕臣网络台州自助建站公司
  • vscode json
  • 奥威BI:AI数据分析重塑客户体验的实战指南
  • 公司网站开发费摊销大连建设安全网站
  • 东莞教育网站建设浙江建设厅网站查询
  • 深圳公司网站设计企业虹口建设机械网站
  • Rust 所有权与借用机制深度剖析:原理、常见陷阱与实战优化
  • golang学习笔记:标准库encoding
  • Go语言实战教学:从一个混合定时任务调度器(Crontab)深入理解Go的并发、接口与工程哲学
  • 如何做原创小说网站广州商城网站制作网站
  • 让线程按指定顺序运行
  • 定制手机网站开发显示网站翻页代码
  • CoAlbum:多级缓存与性能对比
  • 【算法专题训练】27、树的层序遍历