el-tree树组件懒加载怎么实现

发布时间:2023-03-10 11:31:14 作者:iii
来源:亿速云 阅读:171

这篇“el-tree树组件懒加载怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“el-tree树组件懒加载怎么实现”文章吧。

实现懒加载tree,需要为tree组件添加lazy和:load="load"

首先,load属性绑定一个懒加载函数,当点击节点时触发

一般是通过树节点id请求后端接口,添加新的节点数据,但我最近遇到的是后端一次性返回上千条数据(树数组结构),由前端进行处理实现懒加载

我们来看下怎么实现

  <el-tree
      ref="tree"
      lazy
      :load="load"
      highlight-current
      @node-click="handleNodeClick"
      :expand-on-click-node="false"
      :node-key="key"
      :props="defaultProps"
      :current-node-key="currentNodeKey"
    >
   </el-tree>
  methods: {
    /** 传递一个懒加载函数给el-tree组件 */
    load(node, resolve) {
      this.chooseNode = node;
      // 这里后端给的数据唯一标识不是id,是key,根据个人数据修改
      this.getTreeData(node.level, node.data.key, resolve);
    },
    /** 懒加载树节点数据处理函数 */
    async getTreeData(level, key, resolve) {
      if (level === 0) {
        this.loading = true;
        const { data: res } = await http.post('getTreeNode');
        if (res.code === 200 && res.data && res.data.length) {
          this.treeData = this.treeArrayToArray(res.data);
          resolve(res.data);
          this.$nextTick(() => {
            // 零级的第一个子节点,也就是第一级的第一个节点
            let nodedata = this.chooseNode.childNodes[0];
            nodedata.expanded = true;
            // 再次触发load方法
            nodedata.loadData();
            // 注意,因为上方再次触发load方法,走了this.chooseNode = node;这一步,所以这里的 this.chooseNode指向的是零级的子节点,也就是第一级,这里的`this.chooseNode.childNodes[0]`表示的是是第二级的第一个节点
            this.currentNodeKey = this.chooseNode.childNodes[0].data.key;
            this.handleNodeClick(this.chooseNode.childNodes[0].data);
          });
        } else {
          resolve([]);
        }
        this.loading = false;
      } else {
        // 根据key去找到点击树节点的children数组,加载数据到其下
        const currentNode = this.treeData.find(item => item.key === key);
        if (currentNode.children && currentNode.children.length) {
          resolve(currentNode.children);
        } else {
          resolve([]);
        }
      }
    },
    /** 树结构数组转换成扁平数组 */
    treeArrayToArray(tree) {
      const arr = [];
      function recursiveFunction(tree) {
        for (let i = 0; i < tree.length; i++) {
          // 给所有没有子节点的节点添加leaf属性,该属性用来取消左侧小箭头
          if (!(tree[i].children && tree[i].children.length)) {
            tree[i].leaf = true;
          }
          arr.push(tree[i]);
          if (tree[i].children && tree[i].children.length) {
            recursiveFunction(tree[i].children);
          }
        }
      }
      recursiveFunction(tree);
      return arr;
    },
    /** 获取点击树节点的数据,进行渲染右侧页面等操作 */
    handleNodeClick(data) {
    },
  },

以上就是关于“el-tree树组件懒加载怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. Java基于字符流形式读写数据的两种实现方法示例
  2. Spring Boot中如何构建Restful API

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

el-tree

上一篇:vue中怎么监听url地址栏参数变化

下一篇:Flutter Future异步如何创建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》