Angular 4 - 在PrimeNG树中传播选择不起作用

时间:2017-11-02 08:30:23

标签: angular primeng

从json文件填充数据时, propagateSelectionUp 设置不会选择上述节点/父节点。有一个属性"父母"类型为TreeNode,但我不确定如何在json文件中添加它。

我已经将节点对象打印到控制台以便能够发现方法和属性,并且看到了" node.parent"未定义...是否有设置父项的方法?

<p-tree [value]="filesTree11" layout="horizontal" selectionMode="checkbox" [(selection)]="selectedFile3" [propagateSelectionUp]="true" [propagateSelectionDown]="false" (click)="test()"></p-tree>

1 个答案:

答案 0 :(得分:1)

我今天也遇到node.parent == null layout="horizontal"问题。我不认为它是那样的。

可能你现在已经有了解决它的方法。如果不是(或者以后可能需要它的人):以下是设置父节点的两种方法:

  1. Quick-n-dirty :您可以在.html文件中插入另一个树组件,该文件与水平树相同的节点。然后使用style隐藏它:

    <p-tree> [value]="filesTree11" [style]="{'display': 'none'}"</p-tree>

    这就是说,这是一个丑陋的,当然不是永久的解决方案。但是对于概念验证或测试,我不明白为什么不......

  2. 彻底的方法:在通过调用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;方法的优点是可以设置其他一些属性,例如expandeddatatype,...