需求
选中子节点的时候,父节点必须被选中,但是仅展示被选中父节点和子节点
新增处理
结合tree的ref属性
<el-tree
:data="data"
show-checkbox
node-key="id"
ref="tree"
:props="defaultProps">
</el-tree>
this.$refs.tree.getCheckedNodes(false, true);
通过getCheckedNodes获取所有选中节点
编辑处理
<el-tree
:data="data"
show-checkbox
node-key="id"
ref="tree"
:default-checked-keys="defaultKeys"
:check-strictly="true"
:props="defaultProps">
</el-tree>
最初准备使用default-checked-keys属性,但是并非预期的效果,因为如果defaultKeys包含父节点,那么它所属的子节点都会被选中,即使你新增的时候没有选中其中的某个子节点。
找了找属性,看到了check-strictly,其描述为"在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false",试了一下,展示效果没有问题,但是选中子类的时候,父类不会被选中,选中父类的时候,子类也不会被勾选,等于完全不在关联,也不是想要的效果。
最终处理
this.$refs.tree.setChecked(key/data, checked, deep);
已选中的key循环使用setChecked处理,具体参数描述如下
(key/data, checked, deep) 接收三个参数,1. 勾选节点的 key 或者 data 2. boolean 类型,节点是否选中 3. boolean 类型,是否设置子节点 ,默认为 false
其中有用的是第三个参数,不再对子节点进行设置,这样即保持了新增时候的选中效果,又可以点击父节点对子节点进行全部选中或者全部取消的效果。