相关描述
需要获取树组件选中的节点,假如父节点被选中(该节点全选),即只返回父节点的id,如父节点未被全选,则正常返回被选中节点的id。
示例一:
如上图,所以的节点都选中了,此时需要获取到一级 2 这个节点的id即可
示例二:
如上图,此时,除了三级 3-2-1 节点外,其余节点均选中,此时需要获取到三级 3-2-2 、二级 2-1 两个节点的id。即二级2-1节点是全选的,其子节点虽然选中状态但是不需要记录其id。
实现代码
实现思路:
利用递归的方法,遍历所有的节点,判断其是否为全选状态,为全选状态时即拿到其id
实现代码:
getSimpleCheckedNodeIds (originData) {
// 定义数组
const checkedNodeIds = []
// 判断是否为全选,若为全选状态返回被全选的节点,不为全选状态正常返回被选中的节点
const isAllChecked = function (node) {
const childNodes = node.root ? node.root.childNodes : node.childNodes
childNodes.forEach(child => {
if (child.checked) {
checkedNodeIds.push(child.data.id)
}
if (child.indeterminate) {
isAllChecked(child)
}
})
}
isAllChecked(originData)
return checkedNodeIds
}
调用方法:
这里需要把树组件实例上的store传入
let arr = this.getSimpleCheckedNodeIds(this.$refs.tree.store)
console.log(arr)
感谢:
此方法得到了同事的帮助,原来也想到需要用到递归的方式来获取,但实际上只是对获取到的树的数据(接口返回),以及选中的keys进行判断,在判断某一节点是否全选上走了弯路!!!ε=(´ο`*)))唉,幸亏得到了同事帮助,在此感谢同事!!!