0

我正在使用primeng树来显示这样的json数据:

<p-tree [value]='dataToDisplayFromConfig' selectionMode='checkbox' [(selection)]='selectedData'>

JSON 数据被读入dataToDisplayFromConfig。我想根据来自这个 json的可见属性使某些节点不可见:

[
    {
        "label": "f",
        "children": [
            {
                "label": "",
                "visible": true,
                "data": "f"
            },
            {
                "label": "s",
                "visible": false,
                "data": "s"
            }            
        ]
    }
]

我们怎样才能实现它?

提前致谢。

4

2 回答 2

2

TreeNode界面没有隐藏或显示项目的选项,因此您必须创建一个过滤子节点并仅返回可见的函数

我已经更新了界面以包含这样的可见选项

export interface NewTreeNode extends TreeNode {
  visible?: boolean;
  children?: NewTreeNode[];
}

getValidTreeNodeItems方法将循环抛出节点和子节点并删除可见等于 false 的任何节点

  getValidTreeNodeItems(treeNodes: NewTreeNode[]): NewTreeNode[] {
    const validItems = treeNodes.filter(i => i.visible !== false);

    validItems.forEach(i => {
      if (i.children) {
        i.children = this.getValidTreeNodeItems(i.children);
      }
    });

    return validItem;
  }

演示

于 2020-02-22T10:35:26.597 回答
2

根据@malbarmavi 的回答,您可以使用TreeNode中的styleClass属性隐藏某些节点。

getTreeNode(treeNodes: any[]): TreeNode[] {
    return treeNodes.map(i => {
       i.styleClass = !!i.visible? '' : 'display-none';
       return i;
    }).map(i => {
        if (i.children) {
            i.children = this.getTreeNode(i.children);
        }
        return i;
    });

 }

并在style.css中,添加以下 css,

.display-none {
    display: none
}

因此,即使隐藏了元素,您仍然可以拥有这些元素。

谢谢。

于 2020-07-26T16:26:59.290 回答