vue tree 传值 不传父元素

152 阅读1分钟
 setRole(data) {
let _index = -1
// 原始数据
let arr = data
// 浅拷贝
let _arr = [...arr]
// console.log('开始数组= ', _arr)
// 回显
for (let i = arr.length - 1; i >= 0; i--) {
parentNode = null
node = null
// 查找父节点
let _obj = this.getNode(this.treeList, arr[i])
// console.log(`${arr[i]}obj:`, _obj)
// 是否有父节点
if (
_obj.parentNode &&
_obj.parentNode.sonList &&
_obj.parentNode.sonList.length > 0
) {
// console.log('要删除的父节点1', _obj.parentNode.id)
// 查找下标
_index = _arr.indexOf(_obj.parentNode.fundId)
// 当前存在就删除
if (_index >= 0) {
// console.log('要删除的节点:', _obj.parentNode.id)
// 首先判断该索引值存在,其次再通过splice删除该位置的元素
_arr.splice(_index, 1)
}
}
// else {
// 当前节点没有父节点,但是是父节点
if (_obj.node && _obj.node.sonList && _obj.node.sonList.length > 0) {
_index = _arr.indexOf(_obj.node.fundId)
// 当前存在就删除
if (_index >= 0) {
// console.log('要删除的节点:', _obj.node.id)
// 首先判断该索引值存在,其次再通过splice删除该位置的元素
_arr.splice(_index, 1)
}
}
}
this.dCheckedKeys = _arr

},
getNode(json, nodeId) {
// 1.第一层 root 深度遍历整个JSON
for (let i = 0; i < json.length; i++) {
if (node) {
break
}
let obj = json[i]
// 没有就下一个
if (!obj || !obj.fundId) {
continue
}
// 2.有节点就开始找,一直递归下去
if (obj.fundId == nodeId) {
// 找到了与nodeId匹配的节点,结束递归
node = obj
break
} else {
// 3.如果有子节点就开始找
if (obj.sonList && obj.sonList.length > 0) {
//4.递归前,记录当前节点,作为parent 父亲
parentNode = obj
// 递归往下找
this.getNode(obj.sonList, nodeId)
} else {
// 跳出当前递归,返回上层递归
continue
}
}
}
// 5.如果木有找到父节点,置为null,因为没有父亲
if (!node) {
parentNode = null
}
// 6.返回结果obj
return {
parentNode: parentNode,
node: node
}
},