Element的el-tree控件后台数据结构的生成以及方法的抽取

yizhihongxing

生成后台数据结构:

  1. 首先,我们需要明确el-tree控件所需要的数据格式,它要求数据使用树形结构进行展示,每一项数据包含以下属性:

  2. label:节点描述

  3. children:子节点数据,是一个数组,也可以为空

  4. 接着,我们需要对后台的原始数据进行格式化处理,使其可以被el-tree控件所展示。常见的处理方式是使用递归的方式将原始数据转换为树形结构,具体过程如下:

  5. 初始化一个空数组treeList

  6. 遍历原始数据源,每个节点都需要经过以下处理:

  7. 将原始数据源中的每一项都转化为一个对象,包含 label 和 children 两个属性

  8. 如果该节点有子节点,则递归处理子节点

  9. 将生成的treeList数组返回,可传入el-tree作为树形结构数据源

方法的抽取:

  1. 可将递归处理树形结构的函数进行封装,作为el-tree控件数据转换的工具方法,方便后续操作。

示例1: 以Vue为例,middlewares为原始数据的结构,生成符合el-tree控件需要的树形结构,并通过template进行展示。

<template>
  <div>
    <el-tree :data="treeData" :props="defaultProps"></el-tree>
  </div>
</template>

<script>
export default {
  data () {
    return {
      middlewares: [
        {
          id: '0',
          name: 'middleware 1',
          children: [
            {
              id: '1',
              name: 'middleware 1-1'
            },
            {
              id: '2',
              name: 'middleware 1-2'
            }
          ]
        },
        {
          id: '3',
          name: 'middleware 2'
        }
      ],
      defaultProps: {
        children: 'children',
        label: 'name'
      }
    }
  },
  computed: {
    treeData() {
      return this.transformData(this.middlewares);
    }
  },
  methods: {
    transformData(rawData) {
      let treeList = [];
      rawData.forEach(item => {
        let node = {
          label: item.name
        };

        if (item.children && item.children.length > 0) {
          node.children = this.transformData(item.children);
        }

        treeList.push(node);
      });

      return treeList;
    }
  }
}
</script>

示例2:以React为例,items为原始数据的结构,生成符合el-tree控件需要的树形结构,并通过jsx进行展示。

import React,{ Component } from 'react';
import { Tree } from 'element-react';
import 'element-theme-default';

class Main extends Component {
  constructor(props) {
    super(props);

    this.state = {
      items: [
        {
          id: '0',
          name: 'middleware 1',
          children: [
            {
              id: '1',
              name: 'middleware 1-1'
            },
            {
              id: '2',
              name: 'middleware 1-2'
            }
          ]
        },
        {
          id: '3',
          name: 'middleware 2'
        }
      ]
    };
  }

  render() {
    return (
      <div>
        <Tree
          data={this.transformData(this.state.items)}
          props={{children: 'children', label: 'name'}}
        />
      </div>
    );
  }

  transformData(rawData) {
    let treeList = [];
    rawData.forEach(item => {
      let node = {
        label: item.name
      };

      if (item.children && item.children.length > 0) {
        node.children = this.transformData(item.children);
      }

      treeList.push(node);
    });

    return treeList;
  }
}

export default Main;

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Element的el-tree控件后台数据结构的生成以及方法的抽取 - Python技术站

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

相关文章

  • JavaScript函数调用经典实例代码

    JavaScript函数调用经典实例代码攻略: 一、函数调用方式 JavaScript 中函数的调用分为四种方式: 函数调用 直接调用函数。 javascript function fn1() { console.log(“fn1 被调用了”); } fn1(); 方法调用 将函数作为对象的一个属性,通过该对象调用函数。 javascript var obj…

    JavaScript 2023年5月27日
    00
  • Vue Cli 3项目使用融云IM实现聊天功能的方法

    首先我们需要了解一下Vue Cli 3和融云IM的基本概念: Vue Cli 3是一个基于Vue.js进行快速开发的完整系统,帮助开发者搭建一套可靠、高效的前端工作流。 融云IM(Instant Messaging)是一款具有即时通信功能的云通信服务,支持发送文本、图片、音频、视频等多种消息类型,适用于各种在线聊天场景。 实现聊天功能的步骤如下: 1.创建项…

    JavaScript 2023年6月11日
    00
  • [js+css]点击隐藏层,点击另外层不能隐藏原层

    针对“[js+css]点击隐藏层,点击另外层不能隐藏原层”的需求,需要用到JavaScript和CSS的结合。下面是实现这个效果的完整攻略: 步骤 1:HTML结构 首先,需要定义两个层,一个是要隐藏的层,一个是阻止隐藏的层。例如: <div class="hide" id="hide-layer">这是要…

    JavaScript 2023年6月11日
    00
  • JavaScript实现同时调用多个函数的方法

    为了实现同时调用多个函数,有两种方法可以选择:串行和并行。串行指的是按照指定的顺序依次执行函数,而并行指的是同时执行所有函数,不关心它们的顺序。 串行调用函数的方法 方法一:Promise 利用 ES6 的 Promise 实现,可以方便地实现多个函数的串行调用。 Promise 对象的主要作用是为处理异步操作提供一个统一的接口,其中包含三个状态:进行中(p…

    JavaScript 2023年5月27日
    00
  • 9种改善AngularJS性能的方法

    下面我将详细介绍“9种改善AngularJS性能的方法”的攻略。 1. 使用ng-bind代替{{}}双花括号 在AngularJS模板中,我们使用{{}}双花括号语法绑定数据。但是,如果将其频繁使用,会导致页面性能下降。原因是{{}}会触发浏览器的$digest循环,即使只有少量数据更新。 因此,在这种情况下,可以考虑使用ng-bind指令代替{{}}。n…

    JavaScript 2023年6月11日
    00
  • JavaScript迭代器的含义及用法

    JavaScript迭代器的含义及用法 在Javascript中,迭代器指的是一个能够依次访问集合中的元素的对象。 同时,该示例还实现了一个迭代器方法,可以用来访问集合的每一个元素。 迭代器是用于解决循环一个集合并访问其每个元素的问题。 迭代器对象就像计算机科学中所说的迭代器一样,它跟踪集合中的元素并在必要时返回下一个元素。 迭代器方法返回的对象具有一个ne…

    JavaScript 2023年5月18日
    00
  • vue实现微信浏览器左上角返回按钮拦截功能

    介绍:Vue可以通过使用路由导航守卫来拦截某些操作,其中之一就是拦截微信浏览器左上角的返回按钮。本攻略将详细介绍如何使用Vue及路由导航守卫实现微信浏览器左上角返回按钮的拦截功能。 步骤: 1.安装Vue Router 安装Vue Router是实现路由动态跳转的必要前提。使用npm或yarn,运行以下命令: npm install vue-router O…

    JavaScript 2023年6月11日
    00
  • HTML5中Localstorage的使用教程

    HTML5中Localstorage是用于在客户端浏览器上存储数据的API,这使得我们可以在浏览器中存储和检索数据,而不需要服务器的帮助。这篇文章将会介绍HTML5 Localstorage在Web应用程序中的使用方式,包括了创建,添加和检索基于关键字的数据,并且提供了两个本地存储的例子,帮助读者更好地理解Localstorage的使用。 简介 Locals…

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