el-tree树形组件懒加载

目录

一、树形懒加载

二、HTML部分

三、JS部分 

四、思路

一、树形懒加载

初始化只获取最外层节点数据, 展开节点时才进行该层数据的获取,默认情况下 Tree 无法预知某个节点是否为叶子节点,所以会为每个节点添加一个下拉按钮,如果节点没有下层数据,则点击后下拉按钮会消失。

如果你想提前告知 Tree 某个节点是否为叶子节点,从而避免在叶子节点前渲染下拉按钮。可以在数据添加leaf: true,就证明该节点下没有子级。 

提前判断是否为叶子节点效果:0,1数据left:true为叶子节点不能展开,其他节点非叶子结点展开时才获取数据;

二、HTML部分

  <el-tree
            lazy
            :props="treeProps"
            :load="handleLoad"
          >

三、TS部分 

const treeProps = {
  label: "name",
  children: "children",
  isLeaf: "leaf",
};

const handleLoad = (node: any, resolve: any) => {
    if (node.level === 0) {//第一级节点
      loadNode(resolve);
   }else if (node.level > 1) //其他级节点
    loadNode(resolve, node.data.id);
   }
  };

const loadNode = async (resolve: any, id?: any) => {
    if (!id) {
      let res = await getDirectoryListApi();//第一级节点接口不用传参
      resolve(res.data);
  } else {
    let res = await getDirectoryListApi({ parent_id:id});//传当前节点的id,获取节点数据
    return resolve(res.data);
  }
  };

四、思路

首先,使用el-tree树组件必须指定lazy和load属性

  • lazy告知树组件开启懒加载模式,加上即可
  • load绑定的是一个函数,这个函数主要是用来在页面初始化加载的时候,用于向后端发请求获取el-tree的树结构的数据的。页面初始化加载,load绑定的函数会自动执行
注意,如果树组件开启了懒加载模式,就不用在el-tree组件标签中写:data="data属性了,因为load绑定的函数,有两个参数,node和resolve,node是树节点,而resolve又是一个函数,相当于高阶函数(函数柯里化)了,我们只需要把后端返回的数据(单层数组结构),放在这个函数里面,这个函数会自动把数据传递到树组件里面去,同时渲染视图

我们需要和后端约定好传递的数据结构,即props中的配置

  • data中的props中的isLeaf属性,指定的是:是否是树组件中的叶子节点。什么是叶子节点?我们知道一棵树有很多分支(树枝),而树枝的末梢则是叶子,所以叶子节点就是树节点的最内层,最里层。所以,我们需要和后端沟通,让后端返回的树结构数据中,最内层数据加上isLeaf属性布尔值,为true就代表是最内层,为false,或者不加这个属性,就代表不是最内层。对应树组件的页面效果就是:为true的树组件,最内层不会有三角箭头。即到底了,没懒加载了
注意,因为树组件的懒加载是,点击树组件节点,加载下一层的数据,所以要和后端沟通,让后端接口数据不要一次性的返回整个树结构的数据,而是分层返回,点击那个树节点,树节点数据中会有id的,根据id发请求到后端,后端再把对应数据返回给前端,是数组结构的数据

 非叶子节点数据

叶子节点数据

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
el-tree-select是Element UI库中的一个组件,用于展示树形结构的下拉选择框。实现可以提高性能,只在需要展开节点时才子节点数据。 要实现el-tree-select的,需要以下步骤: 1. 在el-tree-select组件中设置lazy属性为true,表示开启模式。 2. 在el-tree-select组件中设置load方法,用于子节点数据。load方法接收两个参数:node和resolve。node表示当前需要子节点的节点对象,resolve是一个回调函数,用于将的子节点数据传递给el-tree-select组件。 3. 在load方法中,根据node的信息发送异步请求获取子节点数据,并在请求成功后调用resolve方法将数据传递给el-tree-select组件。 下面是一个示例代码: ```html <template> <el-tree-select v-model="selectedNode" :lazy="true" :load="loadData" ></el-tree-select> </template> <script> export default { data() { return { selectedNode: null }; }, methods: { loadData(node, resolve) { // 发送异步请求获取子节点数据 // 假设请求返回的数据格式为[{ label: 'Node 1', id: 1, children: [] }, ...] axios.get('/api/getChildren', { params: { nodeId: node.id } }) .then(response => { // 将子节点数据传递给el-tree-select组件 resolve(response.data); }) .catch(error => { console.error(error); }); } } }; </script> ``` 在上面的示例中,loadData方法使用axios发送异步请求获取子节点数据,并在请求成功后调用resolve方法将数据传递给el-tree-select组件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值