vue-递归路由实现树形控件展示

<template>
  <div>
    <el-tree :data="treeArr" />
  </div>
</template>

<script>
export default {
  data() { return { treeArr: [] }; },
  methods: {
    getTreeData(obj, arrT) {
      obj.forEach((item, index) => {
      //判断是不是导航路由
        if (typeof item.hidden === "undefined") {
        //判断是单菜单路由还是多菜单路由
          if (item.meta) {
          //如果有多个子菜单时
            let obj = { label: item.meta.title, children: [] };
            arrT.push(obj);
			//对其children再次执行getTreeData()函数
            if (item.children) this.getTreeData(item.children, obj.children);
          } else {
          	// 如果只有一个子菜单
            arrT.push({label: item.children[0].meta.title, children: []});
          }
        }
      });
    }
  },
  mounted() {
    this.getTreeData(this.$router.options.routes, this.treeArr );
  }
};
</script>

路由结构

[
  { path: "/login",, hidden: true},
  { path: "/404", hidden: true},
  { path: "/", children: [
      { path: "dashboard", meta: { title: "刻字小程序", icon: "dashboard" }}
    ]
  },
  { path: "/attendance", children: [
      {path: "/attendance", meta: { title: "考勤", icon: "link", affix: true }}
    ]
  },
  { path: "/settings",meta: { title: "系统设置", icon: "nested" },children: [
      { path: "index",meta: { title: "权限管理" }},
      { path: "theme",meta: { title: "主题设置" }}
    ]
  },
  { path: "*", redirect: "/404", hidden: true }
];

效果图
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值