代码编织梦想

如何获取懒加载后的el-tree全部数据

场景:使用element-ui的el-tree的懒加载模式,在数据懒加载形成树形结构后,要求获取整个树的数据(treeList),el-tree的懒加载是不绑定data,此时是没法拿到实际的树的数据。

解决方案一:自己定义一个存在树形数据的数组treeList,在每次懒加载的relsove的时候,把对应的数据也存treeList数组中,就是拿到懒加载数据,放在treeList对应的children里。

该方案最终肯定是能拿到el-tree树形数据,但是如果涉及到el-tree的排序、删除、更新字段等操作,就需要处理对应的treeList的数据,对el-tree的任何操作就得写对应数据的操作。对于高手肯定不怕,我这种小白就不想写太多的数据操作逻辑,所有提供方案二。

解决方案二:根据懒加载生成的dom树,反推出树形结构的数据。

1、先看下懒加载的el-tree的dom结构,el-tree是整个树,el-tree-node是树的一个节点,el-tree-node里面有el-tree-node__content和el-tree-node__children。el-tree-node__content是显示节点的名称等信息,el-tree-node__children就是该节点的子节点。这不就是典型的树形结构的展示行书。

2、使用el-tree的插槽,通过插槽动态绑定唯一键id,

<el-tree :props="props" :load="loadNode" lazy  >
      <div class="custom-tree-node" slot-scope="{ node }" :id="node.data.id">
        {{ node.label + "33" }}
      </div>
    </el-tree>

在dom上就对应el-tree-node__content里面的元素的属性。

因此可以通过el-tree-node__content获取基本的数据信息,通过el-tree-node__children获取每个子节点的信息。想必到这里,就知道后面要怎么实现了,就是for循环加递归遍历dom节点,生成对应的树数据。

贴完整示例代码

<template>
  <div class="box-item-num">
    <el-tree :props="props" :load="loadNode" lazy  >
      <div class="custom-tree-node" slot-scope="{ node }" :id="node.data.id">
        {{ node.label + "33" }}
      </div>
    </el-tree>

    <el-button @click="forDiGui">获取懒加载树数据</el-button>
  </div>
</template>
   
<script>
export default {
  data() {
    return {
      props: {
        children: 'children',
        label: 'label'
      },
      treeDataArr: [],
    };
  },

  methods: {
    forDiGui() {
      let fristTreeItem = document.querySelector(".el-tree").children;
      let treeDataArr = [];
      //递归for循环
      const  forEachDeep=(treeItemArr,treeDataArr)=>{
        let arr = Array.from(treeItemArr);
      arr.forEach((treeItem) => {
        let treedataObj = {};
        if (treeItem.classList.contains("el-tree-node")) {
          treedataObj = this.getbasicIndo(treeItem.children[0]);
          if (
            treeItem.lastChild &&
            treeItem.lastChild.classList &&
            treeItem.lastChild.classList.contains("el-tree-node__children")
          ) {
            let grouptreeItem = treeItem.lastChild.children;
            forEachDeep(grouptreeItem, treedataObj.children);
          }
        }
        if (treedataObj.name) {
          treeDataArr.push(treedataObj);
        }
      });
      }
      forEachDeep(fristTreeItem, treeDataArr);
      console.log("treeDataArr", treeDataArr);
    },
//获取基本节点信息
    getbasicIndo(nodeContent) {
      let nodeContentData = {
        name: nodeContent.lastChild.textContent, //
        id: nodeContent.lastChild.id,
        children: [],
      };
      // console.log(nodeContentData, "nodeContentData");
      return nodeContentData;
    },
    loadNode(node, resolve) {
      setTimeout(() => {
        if (node.level === 0) {
          return resolve([{ id: 2, label: "节点1-1", leaf: false }]);
        } else {
          return resolve([{ id: node.data.id + '1', label: node.data.label + '-' + (node.level - 1), leaf: node.data.leaf }]);
        }
      }, 1000);
    },
  },
};
</script>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_46750297/article/details/140269587

el-tree加载完成后默认触发点击事件非默认选中(下)支持自定义节点-爱代码爱编程

前面那篇选中默认节点,有朋友留言说能不能支持自定义节点,自己想了想认为可行,思路主要利用el-tree 的current-node-key 和highlight-current属性,如图 <el-tree :data="deptTree" :props="defaultProps"

el-tree的懒加载数据除去没有用到的三角形图标或最后一级三角形)-爱代码爱编程

由于点击节点才去渲染子层(下一层)的数据,通过操作dom的方法去获取元素并改变其样式(display:none)并不容易,而且容易获取失败! 通过多次尝试,利用el-tree固有的属性props中的isLeaf可以直接指定你需要隐藏某个节点的三角形! html结构如下: <el-tree :props="props" lazy :date="da

el-tree懒加载获取数据,反显,数据重组为特定格式{ datasourceid: ‘‘, tableids: [] }_颜箴的博客-爱代码爱编程

<el-scrollbar wrap-class="assets-tree" view-style="display: flex; flex-direction: column; width: 100%;height: 100%;" wrap-style="overflow-x: auto; "> <el-tree ref="asse

ement树形控件 获取选择的所有子节点数据-爱代码爱编程

element树形控件 获取选择的所有子节点数据 正确引入tree树形组件 // An highlighted block <el-tree ref="tree" :data="treeData"

el-tree懒加载-爱代码爱编程

<el-tree node-key="id" :default-expanded-keys="[1]" :data="treeData3" :props="defaultProps" :load="

el-tree实现懒加载,同时获取节点对应的数据并展示-爱代码爱编程

文章目录 前言一、界面样式二、方法实现总结 前言 记录一个简单的功能:el-tree懒加载。 点击树节点,加载下一级目录,同时调用接口展示该节点中的数据。 做完的效果大概是这样: 这里记录一

element ——tree组件懒加载数据、自定义label、修改高亮样式、回显点击状态_element tree 懒加载-爱代码爱编程

需求 整体宽高占一屏,超出滚动条tree组件点击懒加载每一级数据,一共三级三级节点前加icon,标识是否已学习点击高亮显示背景图横向超出省略显示或者横向滚动条纵向超出纵向滚动条修改其字体和间距☆☆☆☆☆从别的页面跳入

el-爱代码爱编程

目录 一、树形懒加载 二、HTML部分 三、JS部分  四、思路 一、树形懒加载 初始化只获取最外层节点数据, 展开节点时才进行该层数据的获取,默认情况下 Tree 无法预知某个节点是否为叶子节点,所以会为每个节点添加一个下拉按钮,如果节点没有下层数据,则点击后下拉按钮会消失。 如果你想提前告知 Tree 某个节点是否为叶子节点,从而避免

el-爱代码爱编程

filter-node-method 的逻辑不需要变动 以下为我的html结构 <div> <el-input placeholder="输入关键字进行过滤" v-model="filterText"> </el-input> <el-checkb

el-爱代码爱编程

用于el-tree懒加载一个图层目录,勾选父级目录,需要得到该父级目录下所有叶子节点数据 <el-tree :data="directoryDat

el-爱代码爱编程

首先,我先给大家说一下我们这个功能的需求. 先给大家看两张截图.  一共有3层.第一层是省, 第二层是省直部门和省下面的各个市. 第三层是是下面的各个区县. 哈尔滨市下面有一个市直部门. 其实下面还有个区县.各区县下面也有数据. 大家可以看图2 那么我们最终想要的数据结构是只有两层.意思就是省,市,我们直接在市下面去就拿本市的数据. 就像这样.在市

el-爱代码爱编程

el-tree 修改默认左侧三角图标,并使没有子级的那一项不展示图标,el-tree 修改默认左侧图标,以及修改默认方框大小和里面勾选的图标大小 // DOM <div class="treeSection"&

使用el-爱代码爱编程

使用el-tree-select实现懒加载 1.需求 项目中需要实现行政区划的查询,但是由于行政区划的数据量比较大,达到了几十M,因此需要采用懒加载的方式提高用户体验。后端给出的接口是逐级查询。 2.效果 3.代