Настройка структуры данных в виде таблицы

У меня вопрос о дереве. Можно ли сделать компонент дерева похожим на таблицу? Вот чего я хочу:

ht tps:https://stackru.com/images/dbe3c74792d245e8fd74e30c79fd1c1c533f9246.png

Вот отрывок из примера документации:

nodes = [
    {
      id: 1,
      name: "Санхүү",
      children: [{ id: 2, name: "child1" }, { id: 3, name: "child2" }]
    },
    {
      id: 4,
      name: "Санхүүгийн бус",
      children: [
        { id: 5, name: "Данс нээх харилцах" },
        {
          id: 6,
          name: "Карт захиалах",
          children: [{ id: 7, name: "subsub" }]
        }
      ]
    }
  ];

1 ответ

Решение

Я думаю, что лучший подход - создать таблицу с узлами. Для этого мы используем переменную "данные" и рекурсивную функцию.

data:any[]=[]
  getData(data:any[],index,nodes)
  {
    nodes.forEach(x=>{
      x.level=index
      data.push(x)
      if (x.children && x.open)
        this.getData(data,index+1,x.children)
    })
    return data;
  }

Посмотрите, что в "данных" у нас есть узлы и "уровень", чтобы мы могли узнать, на каком уровне находится наш узел. Если у нас есть.html как

<table>
  <tr *ngFor="let item of data">
    <td [style.padding-left]="(2*item.level)+'rem'">
      <button *ngIf="item.children" (click)="click(item)">+</button>
      {{item.name}}</td>
  </tr>
</table>

Когда мы делаем щелчок, мы вызываем функцию

click(item)
  {
    item.open=!item.open;
    this.data=[];
    this.getData(this.data,0,this.nodes)
  }

На самом деле это уродливый пример, но этот stackblitz показывает таблицу

Другие вопросы по тегам