2022-06-15 el-tree部分节点懒加载

不居家办公了,有点不习惯。

需求:

现有一棵选择人员树 (懒加载),希望通过搜索部门,快速定位到想选的人员。
后台返给我的搜索结果是一棵普通树 (非懒加载),且结果可能多个(部门之间可能重名)
用户点击搜索结果树的末级节点,可以通过之前的懒加载接口进行查找下级节点 (此节点及以下懒加载)

在这里插入图片描述
搜索部门名称:DEMO检查,后台返回DEMO检查一DEMO检查二,点击展开懒加载出节点 机关

解决思路

el树是无法实现部分节点懒加载的。当搜索时,备份返回的数据,后续渲染展开子节点时,需要前端模拟懒加载,遍历找到相应节点数据放入树里(注意此处应使用广度优先遍历)

实现过程

  • 监听搜索字段deptName,当内容改变时,如果值不为空,则走搜索部门的接口,反之走懒加载接口
 // 按部门搜索树
      deptName (val) {
        if (this.node) { // 初次加载树时备份根节点
          this.node.childNodes = [] // 清空子节点
          if (val) {
            this.getOrgListSearch(this.node, this.resolve) // 再次执行 load 的方法
          } else {
            this.getOrgListAll(this.node, this.resolve) // 再次执行 load 的方法
          }
        }
      }

  • 树加载第一层(node.level === 0)时,备份返回的数据用于遍历渲染子节点
  • 树加载子节点时
❤ 搜索部门时,返回当前节点层级数据(模拟懒加载)

      deptDataCur (tree, func) {
        let node, curTree = [...tree]
        while ((node = curTree.shift())) {
          const back = func(node)
          if (back) { // 找到了,终止
            break
          }
          node.children && curTree.push(...node.children) // 广度优先
        }
      },
❤ 懒加载方法

if (node.level === 0) {
	...调用搜索部门接口,备份结果this.curNodeData
} else {
			// 懒加载子节点
	       this.deptDataCur(this.curNodeData, item => {
              if (item.id === node.data.id) {
                this.curDeptDatas = item.children // 获取当前节点数据
                return true
              }
            })
            
            //如果有数据,将数据放入树对象;否则走懒加载接口加载子节点
            if(this.curDeptDatas && this.curDeptDatas.length) {
              //塞入数据
              node.data.children = this.curDeptDatas
              resolve(node.data.children)
              
			  // 自动展开加载下级节点
              const nodedata = node.childNodes[0]
              nodedata.expanded = true
              nodedata.loadData()
            }  else {
            	...调用懒加载接口
            }
}
  • 另外
可以通过
this.$refs.tree2.setCurrentKey(this.curNodeKey) 设置初始高亮节点
和
this.$refs.tree2.setCheckedNodes(this.keyarr) 设置初始checked节点
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-tree功能是通过`lazy`属性和`load`方法结合使用来实现的。在`el-tree`组件中,设置`lazy`属性为true表示启用功能,然后通过`load`方法子树数据。 具体实现的步骤如下: 1. 在`el-tree`组件中设置`lazy`属性为true,即`lazy="true"`。 2. 创建一个方法,例如`loadNode`,作为子树数据的方法。 3. 在`loadNode`方法中,根据节点的级别判断是一级节点还是子节点。 4. 如果是一级节点,直接将父级数据设置到`resolve`中,即`resolve(that.knowledgeDatas)`。 5. 如果是子节点,根据需要获取子节点的数据,可以通过异步请求等方式获取。 6. 获取到子节点的数据后,将数据格式化为需要的格式,并使用`updateKeyChildren`方法将数据设置给其父节点,即`that.$refs.tree.updateKeyChildren(node.data.id, resArr)`。 7. 最后,将获取到的子节点数据通过`resolve`传递出去,即`resolve(resArr)`。 通过以上步骤,就可以实现el-tree部分功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Element-ui树形控件el-tree自定义增删改和局部刷新及操作](https://download.csdn.net/download/weixin_38542223/13125838)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [el-tree](https://blog.csdn.net/m0_57311133/article/details/123844869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值