Element-ui树形控件el-tree获取父级节点的id

2,727 阅读1分钟

Element-ui官网给的方法:

getCheckedKeys() { console.log(this.$refs.tree.getCheckedKeys()); },

这种只有在所有子级都被选中的情况下才能获得父级的id,如果不选中所有的子级那么获取得到的id就只有子级的。但是一般提交数据时后台都需要父级id的。

  • 本人写的时候花费了一上午的时间,最后在找到了一种改源码的方法解决了,贴出来供各位有需要的下伙伴参考。
  1. 找到 node_modules/element-ui/lib/element-ui.common.js 文件。

  2. 按Ctrl+F搜索 TreeStore.prototype.getCheckedKeys 这个方法。

  3. if(node.checked) 改为 if (node.checked||node.indeterminate) 如下图:

  TreeStore.prototype.getCheckedKeys = function getCheckedKeys() {
    var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
    var key = this.key;
    var allNodes = this._getAllNodes();
    var keys = [];
    allNodes.forEach(function(node){
      if(!leafOnly || leafOnly && node.isLeaf){
        if(node.checked || node.indeterminate){
          keys.push((node.data || {})[key]);
        }
      }
    });
    return keys;
  };
  1. 保存重启项目console.log(this.$refs.tree.getCheckedKeys());这样就可以看到父级和子级的id了。

!!! 但是要注意一个问题,就是如果回显的话,后端会把父节点一起返回或者父节点的标识也为true,这时就需要做一个处理了... 或者可以参考第二种方案