获取不定级checbox选中的效果,如果选中所有子集,则默认取父级别的值,描述有不清楚的地方,做完后我会将代码全部上传到github上面查看效果,这样更利于理解
旧代码,虽然也做多了获取不定级别的value值,但是代码看起来很冗余
let result = [];
function getNode(item) {
if (!item.children) return;
//获取该对象选中的子list
let checkList = item.children.filter(p => p.check == true);
// console.log(checkList);
if (checkList.length>0 && checkList.length === item.children.length) {
item.check = true;
}
for (let p of item.children) {
if (p.check) {
result.push({
label: p.label,
value: p.value,
check: true
})
} else {
getNode(p);
}
}
}
this.list.map(item => {
let checkList = item.children.filter(p => p.check == true);
if(checkList.length<item.children.length){
item.check = false;
}
if (item.check) {
result.push({
label: item.label,
value: item.value,
check: true
})
} else {
getNode(item)
}
});
console.log(result);
- 优化后的代码
let result = [];
function getNode(item) {
//获取该对象选中的子list
let checkList = (item.children || []).filter(p => p.check == true);
//自己的子集若是全部选中,则自己会自动选中,若是子集有一个没被选中,则自己不能被选中;用于处理父子check同步
if (checkList && checkList.length && checkList.length === item.children.length) {
item.check = true;
}
if (checkList && checkList.length && checkList.length < item.children.length) {
item.check = false;
}
if (item.check) {
result.push({
label: item.label,
value: item.value,
check: true
});
} else {
if (!item.children) return;
(item.children || []).map(item => {
getNode(item);
})
}
}
this.list.map(item => {
getNode(item);
});
console.log(result)
//this.$emit('update:objectValue', this.checkedList);