element ui中的树形的全部选中和展开
zxx的Opera
于 2020-08-01 10:44:44 发布
887
收藏 6
版权
目录
一、功能实现
二、结构构成(两个复选框+树形结构)
三、基础功能
四、后台给我的树形节点对应的键名不对应=>解决办法
五、如何将选择的所有节点一起提交
六、从后台拿到数据如何回填=>树形结构要对应全选中和半选中状态
七、若后台返回的是所有的树形节点,如何使全选框选中
![]()
二、结构构成(两个复选框+树形结构)
三、基础功能
<div class="title">
<el-checkbox v-model="checked1" @change="chooseAll">选中全部</el-checkbox>
<el-checkbox v-model="checked2" @change="expandAll">展开全部</el-checkbox>
</div>
1、选中全部
// 全部选中
chooseAll() {
this.roleList = "";
// 判断按钮的状态
if (this.checked1) {
// 设置
this.$refs.tree.setCheckedNodes(this.data);
for (var i = 0; i < this.$refs.tree.getCheckedNodes().length; i++) {
this.roleList += this.$refs.tree.getCheckedNodes()[i].ID + ",";
}
this.roleList = this.roleList.slice(0, this.roleList.length - 1);
} else {
this.$refs.tree.setCheckedNodes([]);
this.roleList = "";
}
},
// 全部展开
expandAll() {
if (this.checked2) {
for (var i in this.$refs.tree.store.nodesMap) {
this.$refs.tree.store.nodesMap[i].expanded = true;
}
} else {
for (var j in this.$refs.tree.store.nodesMap) {
this.$refs.tree.store.nodesMap[j].expanded = false;
}
}
},
重点:
选中时设置节点:this.$refs.tree.setCheckedNodes(this.data);
展开时设置节点:
this.$refs.tree.store.nodesMap[i].expanded = true;
this.$refs.tree.store.nodesMap[i].expanded = false;
四、后台给我的树形节点对应的键名不对应=>解决办法
<el-tree
:data="data"
show-checkbox
node-key="ID"
ref="tree"
highlight-current
:props="defaultProps"
@check="(click, checked)=>{handleCheckChange(click, checked)}"
:check-strictly="false"
></el-tree>
可自动修改:值
defaultProps: {
children: "Child",
label: "Name",
},
五、如何将选择的所有节点一起提交
for (
var i = 0;
i <
this.$refs.tree
.getCheckedKeys()
.concat(this.$refs.tree.getHalfCheckedKeys()).length;
i++
) {
this.roleList =
this.roleList +
this.$refs.tree
.getCheckedKeys()
.concat(this.$refs.tree.getHalfCheckedKeys())[i] +
",";
}
重点:获取全选和半选的所有key值
this.$refs.tree .getCheckedKeys()
this.$refs.tree.getHalfCheckedKeys()
六、从后台拿到数据如何回填=>树形结构要对应全选中和半选中状态
如一个节点是“父亲”-还有-“儿子”-还有-“孙子”那么儿子是父亲的子节点,孙子是儿子的子节点,是父亲的叶子节点
描述:后台给我的是一个节点的数组,包括父节点和子节点的和,如何实现若父节点下的子节点未全部选中,父节点处于半选择状态。
![]()
arr2.forEach((i) => {
var node = this.$refs.tree.getNode(i);
if (node.isLeaf) {
this.$refs.tree.setChecked(node, true);
}
});
解决:拿到数组的每一个节点,判断其所有的叶子节点是否为true,为则设置this.$refs.tree.setChecked(node, true);
否则就处于半选择状态
七、若后台返回的是所有的树形节点,如何使全选框选中
解决:判断从后台拿到的所有树形结构的ID所形成的数组的长度是否与当前编辑状态的数组长度相同
// 所有权限接口
getAllRuleList() {
getRuleList().then((res) => {
console.log(res.Data);
this.digui(res.Data);
this.data = res.Data;
});
},
// 递归函数
digui(list) {
list.map((item) => {
console.log(item.ID);
if (item.Child) {
this.digui(item.Child);
}
this.ARR.push(item.ID);
});
},
这样一直递归里面的,就能拿到所有的ID所形成的数组
总结:
element ui中树形tree的使用:
选中时设置节点:this.$refs.tree.setCheckedNodes(this.data);
展开时设置节点:this.$refs.tree.store.nodesMap[i].expanded = true;
this.$refs.tree.setChecked(node, true);
this.$refs.tree.getNode(i);
区别如下:setChecked和setCheckedNodes
![]()
————————————————
版权声明:本文为CSDN博主「zxx的Opera」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Kungirl/article/details/107727243