要实现的效果为,勾选父节点时,子节点不会被勾选,如图:
勾选子节点时,父节点勾选,如图:
取消父节点时,子节点全部取消,如图:
1、在el-tree代码中加上父子节点不互相关联的属性,:check-strictly="true",然后绑定节点选中时的事件,@check-change ="checkChange"。
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);
}
}
},