vue在前后端交互中格式化路由的两种方式

看到一些数据交互案例中,对于权限路由后端返回一个带pid的一维路由数组,pid代表父级id,这个数组要前端格式化成树形结构路由。

此方式稍显麻烦的原因是不知道前端是不需要这个pid的,也就是本文中的第二种方式,可以把有权限访问的路由name直接发给前端。vue端建有一个完整路由表,根据name数组就可过滤出一个可访问的路由结构,而不必指定父级是谁。

一、先实现带pid的路由数组的格式化方法:

把后台数据格式化成树:

js 复制代码
let formatTree = (data) => {   //data是后端路由的数据
    let ps = data.filter(d => d.pid == 0)
    const cs = data.filter(d => d.pid != 0)
    let format = (ps) => {
      ps.forEach(p => {
        cs.forEach(c => {
          if (p.id == c.pid) {
            if (p.children) p.children.push(c)
            else p.children = [c]
          }
        })
        p.children && format(p.children)
      })
      return ps
    }
    return format(ps)
  }

树形结构格式化路由:

js 复制代码
formatRoutes(data) {   //data是上边的树形结构数据
      let routes = [];
      data.length &&
        data.forEach(route => {
          let r = {          //格式化成需要的结构
            name: route.title,   
            component: route.component,
          };
          if (route.children) {
            r.child = this.formatRoutes(route.children);  
          }
          routes.push(r);
        });
      return routes;
    }

二、直接发给前端可访问路由name的情况:

不用担心只给子路由name而无法得到父级,都是递归的应用。

js 复制代码
function selectArrayByNames(arr,names) {  //arr是vue完整路由表,names是后端给的路由name集合
	let _arr = [];
	arr.forEach((r) => {
		if (names.indexOf(r.name) != -1) {   
			_arr.push(r);
			return   //不必判断有没有children了,匹配names的路由都是最底层的路由。
		}
		if (r.children) {
			r.children = this.selectArrayByNames(r.children,names);
			if (r.children.length > 0) _arr.push(r);
		}
	});
	return _arr
}
相关推荐
m0_5474866616 分钟前
《Vue.js + uni-app全栈开发从入门到实践 》全套PPT课件2026版
vue.js·uni-app
达子6662 小时前
第10章_HarmonyOs开发图解 用JS开发UI
vue.js
奶糖 肥晨3 小时前
想return数据 返回的确是函数问题处理
vue.js
无巧不成书02183 小时前
Vue+Vue-CLI全平台零基础搭建教程
前端·javascript·vue.js·vue·前端开发·vue-cli·前端环境搭建
张人玉4 小时前
基于 Vue 3 + ECharts + Express + SQLite 的可视化大屏与业务管理系统——YOLOv8 高精度车辆行人检测与计数系统
数据库·vue.js·yolo·sqlite·echarts·express
腻害兔13 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
sugar__salt20 小时前
Vue3 表单双向绑定与响应式核心 API 技术详解
前端·javascript·vue.js
郝亚军20 小时前
使用Vue 3和Nginx打包和部署Vue.js项目的一般步骤
前端·vue.js·nginx
阿懂在掘金1 天前
企业级命令式弹窗方案:三行代码适配已有 Dialog
前端·vue.js·前端框架
YWL1 天前
OpenLayers + Vue 2 使用指南(01)
前端·javascript·vue.js