Bootstrap

el-tree的使用,懒加载数据

前段时间碰到项目需要使用el-tree,由于未接触过还是花费了一段时间,特此记录一下。

需求

要初始化树形数据,点击展开时请求后端数据返回,组装成新树再渲染展示。

 

来吧展示

<el-form-item label="实体类型" prop="entityType">
  <el-popover placement="bottom" width="200" trigger="click"
 v-model="popoverVisible">
    <el-tree style="background: transparent;color: #fff;"
             :data="entityTypes" :props="defaultProps"
             lazy  //load懒加载时:load="loadNode"才生效
             :load="loadNode"
             :expand-on-click-node="false"
             @node-click="selectEntityTypeHandler"></el-tree>
    <el-input slot="reference" readonly size="small" 
        style="width: 82%;cursor: pointer" placeholder="请选择实体类型" 
                v-model="form.selectedEntityType">
    </el-input>
  </el-popover>
</el-form-item>

此处省略选择组件时请求后端数据的代码

defaultProps设置如下,isLeaf为是否为最后一层节点,是否还可展开,在请求返回数据后组装数据,在为最后一层数据是isLeaf为true,则不会展示左侧展开箭头。下面load方法中有组装示例以及效果展示

defaultProps: {
          children: 'children',
          label: 'label',
          isLeaf: "isLeaf"
        },

我这边在监听到事件后使用async关键字去请求后端数据,在展开节点时也使用async请求后端数据、返回后渲染

  //懒加载
      async loadNode(node, resolve){
        var self = this;
        if (node.level === 0) {
          //本地的数据,一个承载中国字样的数组;
          return resolve(self.form.entityTypes);
        } else{
          if (node.data.catalog) {//目录;
            let rs = await apiGetEntityDirType(node.data.entityDirInfo.directoryid, node.data.entityDirInfo.businessdbid);
            if (rs && rs.data && rs.data.success) {
              rs.data.data.forEach((obj)=>{
                if (obj.catalog){
                  obj.label=obj.entityDirInfo.directoryName;
                }else {
                  obj.label=obj.datasetInfoVO.datasetAlias;
                  obj.isLeaf=true;
                }
              });
              return resolve(rs.data.data)
            };
          }
        }
      },

最终效果如图

 

搞定!!!

突然就想对领导说...

 

若有问题,还请各位大佬批评指正😁  🌹🌹🌹

 

;