当前位置 : 主页 > 网络编程 > JavaScript >

element-ui tree 手动展开功能实现(异步树也可以)

来源:互联网 收集:自由互联 发布时间:2023-02-08
目录 背景 1.监听复选框点击事件check 2.手动展开,使用node.expand()方法 项目中的实现 1.监听check-change事件 2.编写展开结点方法 背景 项目中用到了vue的element-ui框架,用到了el-tree组件。由
目录
  • 背景
    • 1.监听复选框点击事件check
    • 2.手动展开,使用node.expand()方法
  • 项目中的实现
    • 1.监听check-change事件
    • 2.编写展开结点方法

背景

项目中用到了vue的element-ui框架,用到了el-tree组件。由于数据量很大,使用了数据懒加载模式,即异步树。异步树采用复选框进行结点选择的时候,没法自动展开,官方文档找了半天也没有找到好的办法! 找不到相关的配置,或者方法可以使用。 经过调试与阅读elment-ui源码才发现有现成的方法可以进行结点展开。下面就介绍结点展开的实现!

1.监听复选框点击事件check

<el-tree
        :props="mulprops"
        :load="loadNode"
        lazy
        node-key="id"
        show-checkbox
        accordion
        @current-change="currentChange"
        :filter-node-method="filterNode"
        @check="handleCheck"
        ref="tree"
        :default-checked-keys="defaultCheckedNodes"
        :default-expanded-keys="defaultExpandedNodes">
    </el-tree>

2.手动展开,使用node.expand()方法

handleCheck(nodeData,  treeChecked) {
      let node = this.$refs.tree.getNode(nodeData.id)
      //将选中的未展开的节点进行展开
      if(node.checked && !node.expanded){
        node.expand(function(){
          for(let i=0; i< node.childNodes.length; i++){
            node.childNodes[i].expand()
          }
        })
      }
    }

项目中的实现

(复选框勾选后能自动展开并选中,先展开再勾选也可以自动展开)

1.监听check-change事件

<el-tree
        :props="mulprops"
        :load="loadNode"
        lazy
        node-key="id"
        show-checkbox
        accordion
        @check-change="handleCheckChange"
        :filter-node-method="filterNode"
        ref="tree"
        :default-checked-keys="defaultCheckedNodes"
        :default-expanded-keys="defaultExpandedNodes"
    >
    </el-tree>

2.编写展开结点方法

handleCheckChange(nodeData, nodeSelected) {
      //展开选中的未展开的节点
      let tree = this.$refs.tree;
      let node = tree.getNode(nodeData.id)
      //展开选中的未展开的节点
      this.expandNotExpandNodes(node);

      //具体业务实现
      console.log(nodeData, nodeSelected)
    },
    //展开选中的未展开的节点
    expandNotExpandNodes(node) {
      let tree = this.$refs.tree;
      if (node.checked && !node.expanded && !node.isLeaf) {
        node.expand(function () {
          let childNodes = node.childNodes;
          for (let i = 0; i < childNodes.length; i++) {
            let childNode = childNodes[i];
            //手动触发check-change事件,事件处理函数中回继续调用此函数,形成递归展开
            tree.$emit('check-change', childNode.data, childNode.checked, childNode.indeterminate);
          }
        })
      }
    },

到此这篇关于element-ui tree 手动进行展开(异步树也可以)的文章就介绍到这了,更多相关element-ui tree手动展开内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

网友评论