element-ui tree 手動展開功能實現(異步樹也可以)

背景

項目中用到瞭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手動展開內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: