当前位置:首页 > 技术文章 > 正文内容

Vue嵌套路由_vue嵌套路由怎么配置

在单页应用里,“页面”不再是整屏刷新,而是由路由驱动的组件树。当业务复杂到「用户中心 → 个人资料 / 收货地址 / 账号安全 / 好友列表」这种层级时,嵌套路由(Nested Routes)是唯一能把深度与可维护性同时保留下来的方案。

一、嵌套路由到底在解决什么问题

想象一个用户中心:

如果写成平级路由,每切换一个子页面就要重新加载整个外壳(导航、侧边栏、用户信息),浪费、卡顿、状态丢失。

嵌套路由让外壳只挂载一次,子页面作为 <router-view> 的局部插槽渲染,完美复用外壳,并天然支持面包屑、标签页、权限控制。

二、一条代码看全貌

要点:

  • 层级关系 = 文件系统:父路由的 component 是文件夹,children 是里面的文件。
  • 默认子路由 = 空字符串 '',访问 /user 时自动渲染 Profile
  • 路径写法 = 相对路径:address 会自动拼接成 /user/address,无需手写全量。

三、Layout 组件

子页面渲染时,Layout 组件不会重新创建,导航高亮、用户信息、WebSocket 连接全部保持。

四、动态路由 + 嵌套:URL 即状态

把用户 ID 塞进路径:

访问 /user/42/address 时:

  • Layout 通过 props.id 拿到 42,去拉用户信息;
  • Address 通过 props.id 再去拉地址列表;
  • 切换子路由只改后半段,外壳复用,接口只增不重复。

五、项目实践

1.权限与面包屑

全局后置钩子:

matched 数组从根到当前节点依次展开,天然就是面包屑数据源。

权限同理:在导航守卫里检查 to.matched.some(r => r.meta.needAuth),一次递归即可拿到所有层级要求。

2.代码分割

  • 父路由同步加载:外壳体积小,保证首屏骨架秒出;
  • 子路由全部懒加载:利用魔法注释给 chunk 命名,方便 CDN 缓存。

六、常见问题

  • 空路径与斜杠:path: ''path: '/' 都匹配 /user,但后者会额外触发重定向,导致外壳重复渲染。
  • 深度监听失效:在 Layoutwatch $route 时,记得加 immediate: true,否则首次进入不触发。
  • 滚动位置丢失:给 <router-view>key="$route.fullPath" 可强制重新挂载,但会破坏缓存;更优解是在 activated 钩子里手动恢复 scrollTop。

相关文章

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了...

Vue2的16种传参通信方式(vue传参数)

前言先直入主题列出有哪些传参方式,下面再通过事例一一讲解。props(父传子)$emit与v-on (子传父)EventBus (兄弟传参).sync与update: (父子双向)v-model (父...

Gitlab 的使用和代码审查流程介绍

1、先简洁介绍下项目常用的信息-面板统计页面2、用户信息面板3、服务器信息4、项目信息5、重点介绍代码提交审核机制和授权合并机制开发人员推送代码的时候不能直接推送到master,否则就会报错。此时开发...

编写简单的.gitlab-ci.yml打包部署项目

服务器说明:192.168.192.120:项目服务器192.168.192.121:GitLab为了可以使用gitlab的cicd功能,我们需要先安装GitLab Runner安装GitLab Ru...

程序员项目经理如何调动组员积极性

#这个方法应该很适合程序员都说程序员是比较傲娇,有点小自负(有的是相当,那不叫自负,那是实力的体现好吗),略微呆萌,自尊心偏小强的一类族群。是吗?中招了吗?作为管理好几个组员,要完成一个大项目的项目经...

我常在使用的几个 VIM 插件(我常在使用的几个 vim 插件)

今天给你分享几个我觉得还不错的 VIM 插件,也许能给你带来一点「惊喜感」。vim主题插件 你完全可以让你的编辑器按照你喜欢的样子呈现,在 vimcolors 这个网站中,汇集了很多的主题,你可以进去...