Vue 动态路由怎么配合后端接口返回的扁平化数组递归生成树形路由

舞姬之光

舞姬之光

2026-08-01

862人浏览

原创

关键在于先将扁平数组转为树形结构,再映射为合法路由配置:第一步按pid递归构建树,注意顶级节点识别与死循环防护;第二步将树节点转换为含path拼接、import异步组件、meta透传的路由对象,并通过router.addroute逐条添加。

vue 动态路由怎么配合后端接口返回的扁平化数组递归生成树形路由

直接用后端返回的扁平数组生成 Vue 动态路由,关键不在“有没有 children 字段”,而在于先把它变成树形结构,再映射成合法的路由配置。整个过程分两步:数据预处理(扁平→树)和路由构建(树→router.addRoute)。

把扁平菜单转成树形结构

后端常返回类似 id / pid / path / name / component 的列表,没有嵌套关系。你需要按 pid 找父子关系,递归组装。

  • 先找出所有顶级节点(pid 为空、null"0" 或等于约定根标识)
  • 对每个顶级节点,调用递归函数找它的子项:filter(item => item.pid === current.id)
  • 子项继续递归,直到无子节点为止
  • 注意:避免死循环,检查 pid 是否指向自身或无效 id

树形结构映射为 Vue 路由配置

拿到树之后,不能直接当路由用,要逐层转换字段语义:

灵活路由的PHP库
灵活路由的PHP库

灵活路由的PHP库

下载
  • path 字段保留原值(如 "/user"),子级路径需拼接(父 path + "/" + 子 path,自动去重斜杠)
  • component 字符串需转为异步组件:用 import() 动态加载,例如 () => import(`@/views${menu.component}`)
  • component 的节点(仅作目录)可跳过生成真实路由,但保留 children 供菜单渲染
  • meta 直接透传,用于权限判断、菜单标题、图标等

动态添加到 router 实例

Vue Router 4+ 推荐用 router.addRoute() 单条添加,或 router.addRoutes() 批量添加(注意该方法在 v4.1+ 已弃用,改用多次 addRoute):

  • 确保在用户登录成功、获取菜单数据后执行,且在 router.isReady() 后调用
  • 一级路由可直接 add;带 children 的需先加父路由,再遍历子项逐条 add(父路由必须已存在)
  • 建议封装一个 generateRoutesFromTree(treeData) 函数,返回扁平化路由数组,再统一添加

补充细节:权限与容错

实际项目中还要考虑这些:

  • 过滤掉 meta.hidden === true 或无访问权限的节点(结合 meta.permission 字段校验)
  • 处理 redirectalias 字段,保持与静态路由行为一致
  • 给每个路由加唯一 name,避免命名冲突(可用 idpath 哈希生成)
  • 开发时加日志输出生成结果,上线前做 JSON Schema 校验,防止后端字段异常导致白屏

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1111

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2131

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2653

10

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1111

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

2262

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2131

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

2321

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

336

5

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

858

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 15.5万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.2万人学习