返回专题首页

Vue 专题

路由系统:Vue Router、嵌套路由、守卫与页面组织

Vue 项目一旦从几个局部组件走向真正可导航的应用,路由就不再只是“页面地址切换工具”,而会成为页面组织、权限控制、状态恢复和模块边界的重要基础设施。很多项目后期变乱,不是因为页面太多,而是因为路由设计从一开始就没有被当成系统结构来对待。

Vue 专题第 11 篇 / 26 篇5 分钟

Vue 项目一旦从几个局部组件走向真正可导航的应用,路由就不再只是“页面地址切换工具”,而会成为页面组织、权限控制、状态恢复和模块边界的重要基础设施。很多项目后期变乱,不是因为页面太多,而是因为路由设计从一开始就没有被当成系统结构来对待。

这一篇重点要回答几个问题:

  • 路由为什么不仅仅是 URL 和页面映射;
  • 嵌套路由适合什么场景,不适合什么场景;
  • 守卫到底应该管什么,不该管什么;
  • 页面结构和菜单结构为什么不能简单画等号。

Vue Router 在项目里真正负责什么?

更成熟地看,Vue Router 至少承担四层职责:

  • 定义页面可访问路径;
  • 组织布局和页面层级;
  • 承接一部分 URL 状态;
  • 在导航时串联权限、重定向和数据准备。

所以路由从来不只是前端“跳转功能”,它其实是页面组织方式的一部分。只要这层没想清楚,后面权限、菜单、详情页、标签页和面包屑都会越来越绕。

为什么“页面结构”和“业务结构”要一起考虑?

因为真实项目里,路由不只是技术映射,还会隐含业务认知。比如:

  • 用户管理下面可能有列表、详情、编辑;
  • 订单系统下面可能有列表、审核、异常单、退款;
  • 内容模块下面可能有文章、分类、标签、评论。

如果这些结构只是随手往路由表里堆,很快就会出现:

  • 路由名称混乱;
  • 嵌套层级不清;
  • 菜单和页面关系对不上;
  • 面包屑难维护;
  • 权限粒度难表达。

所以路由设计,本质上也是一次页面信息架构设计。

嵌套路由什么时候最有价值?

嵌套路由最适合那些“共享外层布局,但内部内容可切换”的场景。比如:

  • 后台管理系统的主体布局;
  • 某个详情页下的多个子标签页;
  • 某个配置中心下的多段子页面;
  • 主页面内保留公共筛选栏、工具栏、侧边导航。

它的价值在于:把共享区域和变化区域拆开,让页面结构更稳定。

但它也最容易被滥用。一旦嵌套层级太深,项目很快会出现:

  • 哪一层负责渲染哪一块变得不清晰;
  • 路由跳转和菜单高亮变复杂;
  • 页面缓存、滚动恢复和权限判断都更难维护。

所以嵌套不是越多越专业,而是要服务布局边界。

路由守卫到底应该做什么?

守卫最常见的用途当然是权限判断,但它的真正价值是:在导航发生前后,对一些全局性、跨页面的规则做统一控制。

比较常见的包括:

  • 登录态校验;
  • 权限拦截;
  • 某些页面的重定向;
  • 标题和面包屑更新;
  • 少量全局预处理。

但守卫并不适合承担大量业务逻辑。如果一段逻辑强依赖某个页面自己的数据和状态,就不应该全塞进全局守卫里,否则会让导航链路越来越重。

菜单、权限、路由为什么经常缠在一起?

因为在很多中后台系统里,用户看到的菜单往往和路由有直接关系,但二者又不能完全等同。更稳的理解通常是:

  • 路由负责页面访问结构;
  • 菜单负责导航展示结构;
  • 权限负责决定哪些结构可见、可访问、可操作。

这三件事有交集,但不是同一件事。很多项目后期难维护,就是因为把“菜单数据”直接当“路由数据”,或者把“权限控制”全写死在路由配置里,最后谁都不够灵活。

页面组织为什么不应该只靠文件堆出来?

在 Vue 项目里,尤其是中后台页面很多时,光靠目录和文件名并不能自然得到一个好结构。你还得持续回答:

  • 列表页和详情页是不是同一组页面;
  • 新增 / 编辑是独立页面还是弹窗流程;
  • 标签页系统是否需要路由级表达;
  • 某些筛选条件是否应该进入 URL;
  • 子页面之间切换后,是否需要保留上下文。

这些问题本质上都和路由设计有关,而不是只和页面组件代码有关。

把 Vue Router 放回项目里,最关键的判断是什么?

一个更稳的判断顺序通常是:

1. 先看业务导航结构,而不是先堆配置;2. 再判断哪些页面应该共享布局、哪些应该独立;3. 再决定哪些状态值得进入 URL;4. 最后才是守卫、菜单和权限怎样协同。

这样路由才会成为系统结构,而不是一个不断补丁式增加跳转规则的地方。

最常见的几个误区

1. 嵌套路由越深越好

实际上层级过深往往会明显增加维护成本。

2. 路由守卫里塞大量页面逻辑

会让导航链变重,也让问题难排查。

3. 把菜单、权限、路由完全绑死

短期省事,长期非常僵硬。

4. 适合进 URL 的状态没进 URL

结果刷新、分享和返回体验都很差。

总结

Vue Router 的价值,不只是把地址映射到页面,而是帮助你组织前端应用的导航结构、布局层级、URL 状态和权限边界。只要你把“页面组织、嵌套层级、守卫职责、菜单权限协同”这几件事一起看,路由系统就会成为项目的结构骨架,而不是一堆跳转配置的集合。