Категории и подкатегории отображения Angular в таблице

#angular #typescript

#angular #typescript

Вопрос:

Мне нужно отобразить мои категории и подкатегории в таблице.

Итак, у меня есть объект с категориями

   cats = [
    {
      "id": "1",
      "parent_id": 'root',
      "category": "Dress"
    },
    {
      "id": "17",
      "parent_id": "1",
      "category": "Dress 2"
    },


    {
      "id": "19",
      "parent_id": "1",
      "category": "Men"
    },
    {
      "id": "30",
      "parent_id": "19",
      "category": "Shorts 2"
    },
    {
      "id": "31",
      "parent_id": "19",
      "category": "Shorts"
    }
  ]
 

OnInit Мне нужно отобразить категории, где parent_id является корневым

И при нажатии, например, на категорию одежды, мне нужно показать дочерние категории (где parent_id равно 1)

Это таблица

 <div class="row">
  <div class="col-md-12">
    <table class="bootstrap table-striped">
      <tr>
        <th>Category Name</th>
      </tr>
      <tr *ngFor="let cat of cats">
        <td>
          <a>{{ cat.category }}</a>
        </td>
      </tr>
    </table>
  </div>
</div>
 

Что мне нужно использовать? может быть, какой-то фильтр? У меня нет идеи, и я ничего не нашел

Спасибо!

Ответ №1:

Создайте список (например: filteredList) для хранения отображаемых данных. Измените данные списка фильтрации в соответствии с выбранной категорией.

 filteredList = [];

ngOnInit(){
this.filterByCategory('root')
}

filterByCategory(categoryId){
    this.filteredList = this.cats.filter(cat => cat.parent_id == categoryId)
}
  
 

Здесь функция фильтра вернет массив элементов, который будет удовлетворять условию («cat.parent_id == CategoryID»)

Теперь обновите шаблон, чтобы отразить изменения

 <div class="row">
<div class="col-md-12">
    <table class="bootstrap table-striped">
    <tr>
        <th>Category Name</th>
    </tr>
    <tr *ngFor="let cat of filteredList">
        <td>
        <a (click)="filterByCategory(cat.id)">{{ cat.category }}</a>
        </td>
    </tr>
    </table>
</div>
</div>