从json文件填充数据时, propagateSelectionUp 设置不会选择上述节点/父节点。有一个属性"父母"类型为TreeNode,但我不确定如何在json文件中添加它。
我已经将节点对象打印到控制台以便能够发现方法和属性,并且看到了" node.parent"未定义...是否有设置父项的方法?
<p-tree [value]="filesTree11" layout="horizontal" selectionMode="checkbox" [(selection)]="selectedFile3" [propagateSelectionUp]="true" [propagateSelectionDown]="false" (click)="test()"></p-tree>
答案 0 :(得分:1)
我今天也遇到node.parent == null
layout="horizontal"
问题。我不认为它是那样的。
可能你现在已经有了解决它的方法。如果不是(或者以后可能需要它的人):以下是设置父节点的两种方法:
Quick-n-dirty :您可以在.html
文件中插入另一个树组件,该文件与水平树相同的节点。然后使用style
隐藏它:
<p-tree> [value]="filesTree11" [style]="{'display': 'none'}"</p-tree>
。
这就是说,这是一个丑陋的,当然不是永久的解决方案。但是对于概念验证或测试,我不明白为什么不......
彻底的方法:在通过调用filesTree11
将json数据分配给this.processTreeNodes(filesTree11, null)
之后,迭代并通过节点递归设置父属性:
private processTreeNodes(treeNode: TreeNode[], parent: TreeNode) {
for (const node of treeNode) {
if (parent != null) {
node.parent = parent;
}
if (node.children.length > 0) {
this.processTreeNodes(node.children, node);
}
}
要验证是否已设置node.parent
,您可以在上面的函数之后调用此函数:
private checkTreeNodes(treeNode: TreeNode[]) {
for (const node of treeNode) {
node.parent != null ?
console.log('>> ' + node.parent.label + ' > ' + node.label) :
console.log('>> ' + 'null');
if (node.children.length > 0) {
this.checkTreeNodes(node.children);
}
}
}
&#34;手册&#34;方法的优点是可以设置其他一些属性,例如expanded
,data
,type
,...