iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >el-tree树组件懒加载怎么实现
  • 133
分享到

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

2023-07-05 11:07:31 133人浏览 八月长安
摘要

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

这篇“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>
    • load方法会回调两个参数,第一个是节点信息node,第二个是加载函数resolve

    • resolve会默认触发一次,并且node.level===0,所以就不用在created中请求后端数据了,直接在默认触发中请求后端数据

    • 如果node.level===0说明是默认触发,直接resolve请求后端返回的树数组数据,el-tree懒加载情况下只会渲染数组的第一级,不会渲染数组的children

    • 在默认触发的时候将树数组转成扁平数组,后续懒加载节点的时候从扁平数组里取就可以了

    • 因为懒加载树无法判断有没有子节点,所以必须手动添加leaf:true,才能取消左侧的小箭头,在树结构数组转换成扁平数组时给没有子节点的数组对象加上这一属性

    • 很多时候需要默认展开树节点,比如选中第一级下第一个节点,在nextTick中nodedata.expanded = true来展开节点,nodedata.loadData()再次触发resolve函数

      methods: {        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 } = awaiHttp.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树组件懒加载怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: el-tree树组件懒加载怎么实现

    本文链接: https://www.lsjlt.com/news/351301.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作