当前位置: 首页 > news >正文

双循环递归匹配路由表

/**
*根据后端返回数据要求,导航栏权限返回的是要展示的所以信息,所以我们只能根据返回的对象去匹配我们的路由表,把没有返回的项再路由表里剔除,然后重新生成路由表
*/
// 此处数据皆为模拟操作,真是数据请结合实际情况获取
data: {
    route: [  // 我们定义好的路由表
        {path:"/",name:"a",hidden:true},
        {path:"/b",name:"b",hidden:true,children:[
            {path:"/b_1",name:"b_1",hidden:true},
            {path:"/b_2",name:"b_2",hidden:true},
        ]},
        {path:"/c",name:"c",hidden:true,children:[
            {path:"/c_1",name:"c_1",hidden:true},
            {path:"/c_2",name:"c_2",hidden:true},
            {path:"/c_3",name:"c_3",hidden:true},
        ]},
        {path:"/d",name:"d",hidden:true},
    ],
    permisRoute: [ // 后端返回的路由表权限
        {name:"a"},
        {name:"b",permission:[
            {name:"b_1"},
        ]},
        {name:"c",permission:[
            {name:"c_1"},
            {name:"c_2"},
        ]},
    ]
},
methods: {
    /**
     * [此处方法应写store里,然后再在beforeEach里去动态添加路由,vue2.0提供了addRoutes方法
     * @param  {[type]} route       [router里面自己定义好的路由表]
     * @param  {[type]} permisRoute [后台返回路由表权限]
     * @return {[type]}             [生成新的路由表]
     */    
     filterRoute: function(route,permisRoute) {
        for(let item of permisRoute){
            const name = item.name;
            for(let item of route){
                // 修改hidden,匹配路由表
                if(item.name == name){
                    item.hidden = false;
                    break;
                }
            }
            if(item.permission){
                const permisRouteChild = item.permission;
                const routeChild = route.filter(itme => {
                    return itme.name == name;
                })
                // 递归路由表
                this.filterRoute(routeChild[0].children,permisRouteChild)
            }
        }
        return route
    },
   filtersHidden: function (arr) { // 上一步只是把里面hidden变成true,把filterRoute返回结果传入此函数可以过滤掉hidden为true的对象
    const accessedRouters = arr.filter(route => {
      if(!route.hidden){
        if (route.children && route.children.length) {
          route.children = this.filtersa(route.children)
        }
        return true
      }
    })
    return accessedRouters
  },
}

 逻辑可能有点复杂,如果有更好的方法请指教

转载于:https://www.cnblogs.com/chengjunL/p/8926844.html

相关文章:

  • editplus 注册码
  • 在窗体中把DataGridView中的数据导出Excel
  • Linux学习笔记4月19日任务
  • 《Linux学习并不难》用户管理(1):Linux用户账户分类
  • Java-JUC(八):使用wait,notify|notifyAll完成生产者消费者通信,虚假唤醒(Spurious Wakeups)问题出现场景,及问题解决方案。...
  • 最简单的curl扒网页
  • 如何在微信小程序中使用async/await
  • 实践详细篇-Windows下使用VS2015编译安装Caffe环境(CPU ONLY)
  • 阿里云副总裁:自主可控的云比拿来主义能走更远
  • awk命令详解
  • Linux use apktool problem
  • 小程序页面授权后,页面显示问题
  • Nowcoder84D
  • python 函数
  • 思考:真正的分布式数据库是否让“数据湖”概念成为历史?
  • C++类的相互关联
  • ERLANG 网工修炼笔记 ---- UDP
  • hadoop集群管理系统搭建规划说明
  • js如何打印object对象
  • js学习笔记
  • mockjs让前端开发独立于后端
  • node和express搭建代理服务器(源码)
  • React-redux的原理以及使用
  • Vue 2.3、2.4 知识点小结
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • vue自定义指令实现v-tap插件
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 聚类分析——Kmeans
  • 每天一个设计模式之命令模式
  • 批量截取pdf文件
  • 前端面试之闭包
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 一道闭包题引发的思考
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​HTTP与HTTPS:网络通信的安全卫士
  • !!Dom4j 学习笔记
  • #define用法
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (BFS)hdoj2377-Bus Pass
  • (C语言)球球大作战
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (zt)最盛行的警世狂言(爆笑)
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (蓝桥杯每日一题)love
  • (排序详解之 堆排序)
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)大型网站的系统架构
  • (转)人的集合论——移山之道
  • .gitattributes 文件
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态