#angular #angular10
#angular #angular10
Вопрос:
Я создал приложение для отображения элементов из JSON. У меня более 1500 элементов в большом массиве, а также в массиве массивов, содержащих элементы, отсортированные по категориям.
const fullDataSet = [{name: 'Foo', category: 'vegetable'}, {name: 'Bar', category: 'fruit'}];
const = sortedByCategory = [
[{name: 'Foo', category: 'vegetable'}, {name: 'FooBis', category: 'vegetable'}],
[{name: 'Bar', category: 'fruit'}, {name: 'Baz', category: 'fruit'}]
];
Я внедрил фильтр для поиска по атрибутам в каждом элементе, который выполняется в моем * ngFor.
Проблема в том, что мне также нужно отсортировать элементы по категориям с заголовком для каждой категории.
Теперь у меня есть 2 цикла, по одному для каждой категории в массиве sortedByCategory и вложенный для каждого элемента в категории.
Проблема в том, что если I отфильтрованные результаты пусты, название категории все еще там.
Как я мог бы структурировать свой код так, чтобы названия категорий появлялись только тогда, когда во вложенном цикле ngFor есть элементы после фильтра? Необходима ли идея вложенных циклов и фильтров или это можно сделать более производительным способом?
Комментарии:
1. Вы можете увидеть проблему в приложении здесь , если вы выполняете поиск по случайной строке, все названия категорий все еще там. Я пытался передать тему фильтру, но, похоже, это работает не очень хорошо, и мне было интересно, может быть, я просто не в правильном направлении.
Ответ №1:
Я давно не работал с Angular, но вот моя идея, синтаксис может быть испорчен: D
<div *ngFor="let item of categories">
<Category *ngIf="item.length>0" data={{item}}/>
</div>
В вашем компоненте категории:
<div *ngFor="let item of items">
<p>{{item.name}}</p>
</div>
Комментарии:
1. К сожалению, это не решает проблему получения длины отфильтрованных элементов :/