2021年7月9日星期五

根据后台返回菜单数据生成前端路由时,路径拼接的做法

需求:后台返回的数据,根据名称name查找路由访问的完整路径;后台像下面格式返回,前端可以直接用,后台也直接控制了前端路由;

后台返回数据示例:

 1 var arr = [{ 2  name: '1',//一级菜单 3  path: '/1', 4  meta: { 5   title: '1' 6  }, 7  components: '1', 8  children: [{ 9   name: '11',//二级菜单10   path: '11',11   meta: {12    title: '11'13   },14   components: '11',15  }]16 }, {17  name: '2',//一级菜单18  path: '/2',19  meta: {20   title: '2'21  },22  components: '2',23  children: [{24   name: '21',//二级菜单25   path: '21',26   meta: {27    title: '21'28   },29   components: '21',30   children: [{31    name: '211',//三级菜单32    path: '211',33    meta: {34     title: '211'35    },36    components: '211',37    children: [{38     name: '2111',//四级菜单39     path: '2111',40     meta: {41      title: '2111'42     },43     components: '2111',44    }]45   }]46  }]47 }]

例如:

菜单名为11的当前路径是11,页面跳转需要的完整路径是 /1/11

菜单名为2111的当前路径是2111,页面跳转需要的完整路径是 /2/21/211/2111

第一步:找到当前路径

function find(list){ let path = '' //要返回的完整路径 for(var i=0;i<list.length;i++){  if(list[i].meta.title==='2111'){//找到了就返回    path = list[i].path   return path  }else{//没找到去看子集里面是否有,没有就下一个循环   if(list[i].children){    var a = find(list[i].children)    if(a){     path = a     return path    }   }  } }}find(arr) //返回 2111,只是菜单名为2111的当前路径

 

 

第二步:尝试把父组件路径和当前组件路径拼接起来

 1 function find(list,fpath){// fpath为父组件路径 2  let path = '' //要返回的完整路径 3  for(var i=0;i<list.length;i++){ 4   if(list[i].meta.title==='2111'){//找到了就返回 5    //path = list[i].path 6    path = fpath + (fpath?'/':'') + list[i].path 7    return path 8   }else{//没找到去看子集里面是否有,没有就下一个循环 9    if(list[i].children){10     //var a = find(list[i].children)11     var a = find(list[i].children,list[i].path)//将当前组件的父组件的路径 list[i].path 传过去12     if(a){13      path = a14      return path15     }16    }17   }18  }19 }20 21 find(arr) //返回 211/2111 ,返回了父组件和当前组件拼接的路径

 

第三步:拼接所有祖先组件的路径,不管chilren嵌套多深,都能返回这一链路的完整路径

 1 function find(list){ 2  let arr = Array.prototype.slice.call(arguments) 3  arr.shift()//得到传过来的所有祖先组件的路径 如菜单2111的祖先数据是[211,21,/2] 4  let path = '' //要返回的完整路径 5  for(let i=0;i<list.length;i++){ 6   if(list[i].meta.title==='2111'){/......

原文转载:http://www.shaoqun.com/a/859390.html

跨境电商:https://www.ikjzd.com/

landing:https://www.ikjzd.com/w/2368

慧聪集团:https://www.ikjzd.com/w/1836

ensogo:https://www.ikjzd.com/w/1485


需求:后台返回的数据,根据名称name查找路由访问的完整路径;后台像下面格式返回,前端可以直接用,后台也直接控制了前端路由;后台返回数据示例:1vararr=[{2name:'1',//一级菜单3path:'/1',4meta:{5title:'1'6},7components:'1',8children:[{9name:'1
亚马逊收购交易获批 正式进军英国外卖市场!:https://www.ikjzd.com/articles/127258
FBA后端派送几近瘫痪?真实情况竟然是这样的……:https://www.ikjzd.com/articles/127261
2020年英国脱欧对已注册欧盟商标的权利人有什么影响:https://www.ikjzd.com/articles/127232
史上最难2020?大卖半年赚16亿!小卖也喜提豪车!:https://www.ikjzd.com/articles/127260
少妇口述:好色男邻居趁老公出差跟我一夜情:http://lady.shaoqun.com/a/70312.html
口述男朋友在车里㖭我下面 他的舌头弄得我欲仙欲死:http://lady.shaoqun.com/m/a/247531.html
女人坐在头上被㖭 他的舌头弄得我爽水好多:http://lady.shaoqun.com/m/a/248175.html
男人解开女人乳罩吃奶 在野外狠狠的挺进:http://lady.shaoqun.com/m/a/248410.html
为了表现,女朋友居然设计我陪客户一晚上:http://lady.shaoqun.com/a/410971.html
尼泊尔有材料│实际上是为了卖保险而和顾客睡觉:http://lady.shaoqun.com/a/410972.html
爱老公的女人为什么会出轨?三个女人表达她们内心的想法:http://lady.shaoqun.com/a/410973.html
杰夫·贝索斯卸任亚马逊CEO,新任CEO能否为卖家带来幸运?:https://www.ikjzd.com/articles/146504

没有评论:

发表评论