TreeNode - PrimeNG - 打字稿:如何从树中删除节点?

Posted

技术标签:

【中文标题】TreeNode - PrimeNG - 打字稿:如何从树中删除节点?【英文标题】:TreeNode - PrimeNG - Typescript: How to Remove a node from tree? 【发布时间】:2018-02-08 11:32:14 【问题描述】:

谁能告诉我如何从我的树中删除一个特定的节点?

示例: 根节点(this.documentsTree[0]) 孩子(this.documentsTree[0].children[0],this.documentsTree[0].children[1])。第一个孩子也有一个孩子(this.documentsTree[0].children[0].children[0]) PrimeNG 的 Tree。下面你可以看到我的代码的一部分。 谢谢!

import TreeModule from 'primeng/tree';
import TreeNode from 'primeng/api';
export class DocumentsComponent implements OnInit 

documentsTree: TreeNode[] = [];


private createNode(category: CategoryModel) 
 let node = 
   data: category,
   label: category.name,
   expandedIcon: "fa-folder-open",
   collapsedIcon: "fa-folder",
   expanded: category.id == 1,
   children: [],
   leaf: false
 ;
 category.children.forEach(x => node.children.push(this.createNode(x)));
 return node;
 

private loadCategoryTree() 

  this.documentsTree = [];
  var node = this.createNode(this.documentCategoryDTO);
  this.documentsTree = [node];
  this.documentsTreeAux = this.documentsTree;
 

【问题讨论】:

【参考方案1】:

这是我用于从适合您的示例的primeng树中删除的方法,假设您的节点数据具有唯一标识符(例如ID)。

deleteNode(topNode: TreeNode, selectedNode: TreeNode) 
        if (topNode.children != null) 
            var i;
            for (i = 0; i < topNode.children.length; i++) 
                if (topNode.children[i].data.id == selectedNode.data.id) 
                    topNode.children.splice(i, 1);   
                    return;
                
                else this.deleteNode(topNode.children[i], selectedNode);
            
        
        else return;
    

你可以这样使用它:this.deleteNode(this.documentsTree[0], selectedNode);

希望这会有所帮助。

【讨论】:

这可行,但不会刷新 UI。什么时候折叠和展开然后它工作。

以上是关于TreeNode - PrimeNG - 打字稿:如何从树中删除节点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PrimeNG tabMenu 中设置活动选项卡?

PrimeNG 树 - 以编程方式选择 TreeNode

PrimeNG Treenode 组件无法显示数据

打字稿捆绑器到打字稿文件

为我的反应打字稿组件库生成/维护打字稿定义文件

打字稿打字,打字文件夹是啥