element 树形控件父子节点不相关联(勾选父节点时,子节点不会被勾选,取消父节点时,子节点全部取消)

5,668 阅读1分钟

要实现的效果为,勾选父节点时,子节点不会被勾选,如图:

点击父节点.png

勾选子节点时,父节点勾选,如图:

点击第三级子节点时.png

取消父节点时,子节点全部取消,如图:

第一级父节点取消勾选时.png

1、在el-tree代码中加上父子节点不互相关联的属性,:check-strictly="true",然后绑定节点选中时的事件,@check-change ="checkChange"。

父子节点不互相关联的属性.png

节点勾选时的回调事件.png

vue代码如下:

<el-tree
        show-checkbox
        :check-on-click-node="true"
        :data="allMenu"
        default-expand-all
        node-key="id"
        :expand-on-click-node="false"
        :props="menuProps"
        ref="menuTree"

        @check-change ="checkChange"
        :check-strictly="true">
           
</el-tree>

2、js代码如下:

// 节点选中
    checkChange(a,b,c){  
      // 如果为取消
      if(b === false){
        //如果当前节点有子集
        if(a.children){
        //循环子集将他们的选中取消
          a.children.map(item => {
            this.$refs.menuTree.setChecked(item.id,false);
          })
        }
      }else{
        //否则(为选中状态)
        //判断父节点id是否为空
        if(a.pid !== 0){
        //如果不为空则将其选中
          this.$refs.menuTree.setChecked(a.pid,true);
        }
      }
    },