代码编织梦想

el-tree实现懒加载

平铺数组转为树结构

function buildTree(array, id = 'id', pid = 'pid') {
  const map = {}
  const roots = []

  // 创建索引映射关系
  for (const item of array) {
    map[item[id]] = { ...item, children: [] }
  }

  // 构建树结构
  for (const item of array) {
    const parent = map[item[pid]]
    if (parent) {
      parent.children.push(map[item[id]])
    } else {
      roots.push(map[item[id]])
    }
  }

  return roots
}
<template>
  <div class="test-tree" style="width: 100%; height:500px;background: #fff">
    <el-tree :props="props" :load="loadNode" lazy show-checkbox> </el-tree>
  </div>
</template>

<script>
import request from "@/router/axios";
export default {
  data() {
    return {
      props: {
        label: "text",
        value: "id",
        children: "children",
        isLeaf: "isLeaf"
      }
    };
  },
  methods: {
    buildTree(array, id = "id", pid = "pid") {
      const map = {};
      const roots = [];

      // 创建索引映射关系
      for (const item of array) {
        map[item[id]] = {
          ...item,
          children: [],
          isLeaf: item.isLeaf === "0" ? false : true
        };
      }

      // 构建树结构
      for (const item of array) {
        const parent = map[item[pid]];
        if (parent) {
          parent.children.push(map[item[id]]);
        } else {
          roots.push(map[item[id]]);
        }
      }

      return roots;
    },
    async loadNode(node, resolve) {
      console.log(node, "我是一颗树");
      if (node.level === 0) {
        const { data } = await request({
          url: "/tree/lazyTree",
          method: "post",
          data: {
            root: "",
            bakTime: "",
            cancelFlag: "00901"
          }
        });
        if (data.code === "0") {
          const tree = this.buildTree(data.data);
          console.log(tree);
          return resolve(tree);
        }
      }

      if (node.level === 1) {
        return resolve(node.data.children);
      }
      if (node.level > 1) {
        const { data } = await request({
          url: "/tree/lazyTree",
          method: "post",
          data: {
            root: "",
            bakTime: "",
            cancelFlag: "00901",
            id: node.data.id
          }
        });
        if (data.code === "0") {
          const tree = this.buildTree(data.data);
          return resolve(tree);
        }
      }
    }
  }
};
</script>

<style></style>

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

vue中el-tree实现懒加载、动态增删改-爱代码爱编程

前言 在最近的一个项目中,有一个组织树的需求,效果图: 因为数据量比较大,要求懒加载并且能够在树上对组织进行操作,项目使用的是vue+ElementUI。ElementUI中有个el-tree,正好可以拿来用。项目引入ElementUI什么的就不说了,大家都知道,直接使用el-tree实现需求吧。 首先看下ElementUI中关于el-tree懒加载

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

先看效果: 结构如下: <el-tree ref="tree" lazy :props="props" :load="loadNode" node-key="label" highlight-current @node-click="handleNodeClick"> </el-tree> s

el-tree 自定义懒加载_dread_lxy的博客-爱代码爱编程

话不多说,直接上代码 1.懒加载一定要通过lazy 和:load="loadNode" <el-tree lazy :load="loadNode" :data="tableData" node-key="id"

el-tree懒加载及数据刷新-爱代码爱编程

给 el-tree添加lazy属性和load属性,load属性的值是加载数据的方法。 <el-tree ref="tree" node-key="id" :load="loadNode" lazy> </el-tree> async loadNode(node, resolve) {

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

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

el-爱代码爱编程

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

el-爱代码爱编程

需求:弹层树的数据 默认来源 取自车型的第一个数据;默认展示树第一节点的值,后续弹层按照懒加载形式点击节点展开 代码实现如下: <el-tree v-if="ibshow" ref="refTree" v-loading="list.loading" :props="pr

elementui el-爱代码爱编程

el-tree 文件数据懒加载 <div class="moveFile"> <div class="treeBox"> <el-tree lazy accordion