Вложенное Дерево Углового Материала

#angular #angular-material

Вопрос:

Может ли кто-нибудь, пожалуйста, помочь мне с самым простым методом добавления нового узла во вложенное дерево углового материала? Я искал везде и не нашел подходящего метода для вложенного дерева. Это моя треска до сих пор :

 TS:
export class FileNode {
  children!: FileNode[];
  fileName!: string;
  type: any;
}

    export class AppComponent {
      nestedDataSource= new MatTreeNestedDataSource<FileNode>();
      nestedTreeControl = new NestedTreeControl<FileNode>(node => node.children);
    
      constructor() {
        this.nestedDataSource.data=TREE_DATA;
       }
    
       hasChild = (nr: number, nodeData: FileNode) => { return !(nodeData.type); };
          } 
HTML :
<mat-tree [dataSource]="nestedDataSource" [treeControl]="nestedTreeControl" class="example-tree">

<!--The node who does not need expansion because is a file of a folder-->
  <mat-tree-node *matTreeNodeDef="let node">
      <li class="mat-tree-node">
          <button mat-icon-button disabled></button>
          {{node.fileName}}: {{node.type}}
          <button mat-icon-button><mat-icon>add</mat-icon></button>
      </li>
  </mat-tree-node>

<!--The node who does need expansion because is a folder-->
  <mat-nested-tree-node *matTreeNodeDef="let node; when: hasChild">
      <li>
          <div class="mat-tree-node">
              <button mat-icon-button matTreeNodeToggle>
                  <mat-icon class="mat-icon-rtl-mirror">
                      {{nestedTreeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
                  </mat-icon>
              </button>
              {{node.fileName}}
              <button mat-icon-button><mat-icon>add</mat-icon></button>
          </div>
          <ul [class.example-tree-invisible]="!nestedTreeControl.isExpanded(node)">
              <ng-container matTreeNodeOutlet></ng-container>
          </ul>
      </li>
  </mat-nested-tree-node>
</mat-tree>

<!--The compiler chooses the node depending on the method: hasNestedChild-->
 

Ответ №1:

Решение, которое вы ищете, уже доступно в их официальной документации. Пожалуйста, проверьте https://material.angular.io/components/tree/examples#tree-checklist свяжись и дай мне знать, если это не решит твой вариант использования.

Комментарии:

1. Да, я знаю об этой документации, но я думал, что это более простой метод без флажков и других дополнений (сначала немного более распространенный). В этой документации даже создание дерева сложнее, чем у меня. Я имею в виду, что документация содержит как плоское, так и вложенное дерево и другие вещи