我是用了ElementUI的tree控件,并且设置check-strictly为true,勾选子节点与勾选父节点现在是没有关系的,现在我勾选了其中的一个子节点,我该如何通过这个子节点找到它对应的父节点或者根节点?
我是用了ElementUI的tree控件,并且设置check-strictly为true,勾选子节点与勾选父节点现在是没有关系的,现在我勾选了其中的一个子节点,我该如何通过这个子节点找到它对应的父节点或者根节点?
elementUi 有个方法是 getNode()
打印 this.$refs.tree.getNode(id);
可以看到整个节点的数据
所以this.$refs.tree.getNode(id).parent.data
就是我们要找的父节点了
自己实现个。
获取到子节点的id,然后遍历data,寻找父节点
// 广度优先遍历
// data 就是ElementUI的Tree组件里那个data
let node = [data]
let ok = false
let result // 包含你说的那个子节点的父节点
while (!ok) {
let item = node.shift()
if (item.id == id) {
result = item
ok = true
} else if (item.children && item.children.length > 0) {
node = node.concat(item.children)
}
}
如果后台返回给你的是没转换成树的JSON数组的话,我是这样写的
/**
* @param {Array} data JSON数组
* @param {Array} ids element-ui tree组件getCheckedKeys返回的选中的id数组
* @return {Array} result 所有选中节点的id和他们的父节点及祖父节点id集合
*/
function getIds (data, ids, result) {
const length = data.length
const pids = []
result = result || []
getIds.ids = getIds.ids || ids
if (ids.length === 0) {
const concats = result.concat(getIds.ids)
getIds.ids = null
return concats
}
for (let i = 0; i < length; i++) {
let pid = data[i].pid
if (pid && ids.indexOf(data[i].id) > -1 && result.indexOf(pid) === -1) {
result.push(pid)
pids.push(pid)
}
}
return getIds(data, pids, result)
}
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
官方v2.2.1版本已经提供获取半选中状态节点对象。

具体实现思路:
this.tempKey === -666666 // 临时key, 用于解决tree半选中状态项不能传给后台接口问题. # 待优化
详细实现代码,可在https://github.com/daxiongYan...查阅。