js如何构造elementUI树状菜单的数据结构详解

yizhihongxing

下面是关于如何构造ElementUI树状菜单数据结构的攻略:

一、树状菜单数据结构的构成

ElementUI树状菜单所需要的数据结构是一个层级结构的树形数据结构,它由多个节点组成,每个节点可能有子节点,也可能没有。一棵树可以看做是枝干和叶子构成的,枝干负责连接,而叶子负责储存信息。因此,需要针对菜单的特性构造一个合适的数据结构,这个数据结构应该包含以下属性:

  • 菜单选项名称
  • 路由链接
  • 图标
  • 是否有子菜单
  • 子菜单

下面是一个示例结构:

{
  "name": "Dashboard",
  "route": "/dashboard",
  "icon": "el-icon-menu",
  "children": [
    {
      "name": "分析页",
      "route": "/dashboard/analysis",
      "icon": "",
      "children": null
    },
    {
      "name": "监控页",
      "route": "/dashboard/monitor",
      "icon": "",
      "children": null
    }
  ]
},
{
  "name": "表单页",
  "route": "/form",
  "icon": "el-icon-document",
  "children": [
    {
      "name": "基础表单",
      "route": "/form/basic-form",
      "icon": "",
      "children": null
    },
    {
      "name": "高级表单",
      "route": "/form/advanced-form",
      "icon": "",
      "children": null
    }
  ]
}

二、构建树形结构数据

  1. 递归构建

可以通过递归构建树形结构数据,通过遍历数组中的每一个元素,如果元素有children,则递归解析子节点并挂在当前节点上,示例代码如下:

function buildTree(data) {
  let mapping = {};
  let result = [];

  for (let i = 0, len = data.length; i < len; i++) {
    let item = data[i];
    item.children = [];

    mapping[item.id] = item; // 以元素id为映射键

    let parent = mapping[item.parentId];
    if (parent) {
      parent.children.push(item);
    } else {
      result.push(item);
    }
  }

  return result;
}
  1. 常规循环构建

通过常规的循环构建树形结构数据也是可行的,需要在遍历元素时,利用一个数组存储要遍历的节点,示例代码如下:

function buildTree(data) {
  let stack = [], result = [];

  for (let i = 0, len = data.length; i < len; i++) {
    let item = data[i];

    if (!item.parentId) {
      result.push(item);
      stack.push(item);
    }
  }

  while (stack.length > 0) {
    let current = stack.pop();

    for (let i = 0, len = data.length; i < len; i++) {
      let item = data[i];

      if (item.parentId === current.id) {
        current.children.push(item);
        stack.push(item);
      }
    }
  }

  return result;
}

三、如何使用ElementUI菜单组件

使用ElementUI菜单组件,需要先通过ElementUI的el-menu标签创建一个菜单,然后在el-menu里定义菜单项,设置index属性为路由路径,设置icon属性为菜单icon,设置submenu属性用于嵌套子菜单:

<el-menu :default-active="activeIndex" class="el-menu-vertical-demo" @select="handleMenuSelect">
  <el-submenu v-for="(item, index) in menu" :key="index" v-if="item.children !== null">
    <template slot="title">
      <i :class="item.icon"></i> {{ item.name }}
    </template>
    <el-menu-item v-for="(child, subIndex) in item.children" :key="subIndex" :index="child.route">
      <i :class="child.icon"></i> {{ child.name }}
    </el-menu-item>
  </el-submenu>
  <el-menu-item v-else v-for="(item, index) in menu" :key="index" :index="item.route">
    <i :class="item.icon"></i> {{ item.name }}
  </el-menu-item>
</el-menu>

其中,menu是我们在前面构造的树状结构数据。

至此,ElementUI树状菜单的构造过程就介绍完毕了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js如何构造elementUI树状菜单的数据结构详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • html页面显示年月日时分秒和星期几的两种方式

    让我们来探讨一下如何在HTML页面中显示当前的年月日、时分秒和星期几的两种方式。 方式一:使用JavaScript实现 实现步骤: 在HTML页面中添加一个显示日期时间的标签,例如这里我们使用<p>标签作为容器,<p id=”datetime”></p>: <p id="datetime">…

    JavaScript 2023年5月27日
    00
  • JavaScript阻止事件冒泡的方法

    JavaScript中阻止事件冒泡是前端开发过程中常见的需求。事件冒泡是指当一个元素上的事件被触发时,它会向父级元素传递,直到最顶层的元素。在某些情况下,我们需要阻止这种事件冒泡,使事件只在当前元素上执行。以下是阻止事件冒泡的三种方法: 方法一:使用event.stopPropagation 在事件回调函数中使用event.stopPropagation可以…

    JavaScript 2023年6月10日
    00
  • 常用原生js自定义函数总结

    常用原生JS自定义函数总结 这篇攻略将会介绍一些常用的原生JS自定义函数,包括数组、字符串、日期、对象等方面,让您更加深入地了解JS的各个方面。 数组 数组去重函数 function uniqueArr(arr) { return Array.from(new Set(arr)); } // 示例 const arr1 = [1, 2, 3, 2, 1]; …

    JavaScript 2023年5月27日
    00
  • js完全解析url和拼接

    当我们在编写JavaScript代码时,有时候需要操作URL来完成一些特定的需求,比如向服务器发送请求、获取参数以及跳转到其他页面等。本文将为您详细讲解如何完全解析和拼接URL,以便于您在开发中更加轻松地完成URL相关的操作。 解析完整URL 我们先来看一下如何解析一个完整的URL,这个过程中要获取的部分包括协议、主机、端口、路径、查询参数以及哈希值。我们可…

    JavaScript 2023年6月11日
    00
  • javascript this详细介绍

    JavaScript this详细介绍 在 JavaScript 中,this 关键字是其中的一个重要概念,它代表当前函数执行上下文中的主体,即当前正在执行的对象。理解 this 的正确使用方法对于编写高质量的 JavaScript 代码来说非常关键。 显式绑定 this 在 JavaScript 中,可以通过调用 call 或 apply 方法显式地指定函…

    JavaScript 2023年5月18日
    00
  • Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗

    让我来给你详细讲解一下如何使用Bootstrap编写一个在当前网页弹出可关闭的对话框。以下是具体的步骤: 版本说明 在编写本文时,Bootstrap 的最新版本为 v5.1.0,所以以下过程中的代码也是基于该版本编写的。 准备工作 在使用 Bootstrap 之前,你需要在你的网页中先引入相关的 CSS 和 JavaScript 文件。本文以 CDN 引入为…

    JavaScript 2023年5月19日
    00
  • ie6、ie7dom 元素重新渲染及zoom的使用

    当网站需要支持IE6和IE7浏览器时,可能会出现页面布局绘制问题,这是由于IE6和IE7的渲染机制不同,就会导致DOM元素重绘的问题。为解决这一问题,可以使用zoom属性重新渲染元素。 什么是DOM元素重新渲染 DOM元素的重新渲染是指改变元素的外观属性时,需要将其重新绘制一次。当浏览器重新渲染元素时,会影响到布局和性能。IE6和IE7的浏览器默认采用的是H…

    JavaScript 2023年6月10日
    00
  • JS控制div跳转到指定的位置的几种解决方案总结

    让我来详细讲解一下“JS控制div跳转到指定的位置的几种解决方案总结”的完整攻略。 1. 利用锚点 首先我们可以利用HTML中的锚点来实现。在需要跳转到的位置加上一个a标签,然后在href属性中指定一个以#开头的地址,例如:<a href=”#target”>跳转到目标位置</a>。在页面中需要跳转的目标位置加上一个id为target…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部