前端/移动开发面试题更新 2026-08-05

在项目中你提到用 Vue Router 实现全局导航生成,能否具体说明你是怎样依据路由配置文件来动态生成导航菜单的?

前端/移动开发编码实现技术原理Vue Router

考察说明

考查候选人对 Vue Router 路由配置的利用能力以及动态生成导航菜单的思路与实现细节。

回答思路

  1. 【回答框架 1】导航菜单的生成通常基于路由配置中的 meta 信息,比如 title 和 icon,以及 children 结构。核心思路是遍历路由表,筛选出需要显示的顶级路由,再递归处理其子路由,映射成菜单需要的层级结构。
  2. 【回答框架 2】在 Vue Router 4 中,可以通过 router.options.routes 或 router.getRoutes() 获取路由表。router.options.routes 是原始配置,包含嵌套结构,适合用来生成树形菜单;getRoutes() 返回扁平化列表,包含匹配信息,但丢失层级,需要额外处理父子关系。
  3. 【回答框架 3】对于带权限的系统,还需结合用户权限或角色过滤路由,只保留有权限访问的菜单项;同时要处理隐藏菜单(meta.hidden)和一级菜单重定向等边界,确保菜单与实际可访问页面一致。
  4. 【回答框架 4】生成菜单数据后,通常交给 UI 组件递归渲染;需要考虑菜单项点击跳转与路由 active 状态的高亮绑定,以及动态路由变化时菜单的响应式更新。
  5. 【回答框架 5】实现时还可以将菜单生成逻辑抽成工具函数,输入路由配置和权限,输出菜单数组,便于测试和复用。
  6. 【关键点 1】通过遍历 router.options.routes 并读取 meta 来构建菜单树,保留嵌套层级。
  7. 【关键点 2】处理 meta.hidden、权限过滤和重定向,保证菜单项与实际可访问路由一致。
  8. 【关键点 3】使用递归组件或递归函数渲染多级菜单,并与当前路由联动高亮。
  9. 【易错点 1】不要直接使用 getRoutes() 生成树形菜单,因为它是扁平结构,会丢失父子层级。
  10. 【易错点 2】要处理路由嵌套与菜单展开联动,避免点击子菜单后父菜单未展开导致高亮失效。
  11. 【易错点 3】不要将不显示在侧边栏的中间路由(比如布局组件)也渲染成菜单项,需过滤或处理。