Если вы хотите фильтровать по нескольким параметрам, ваш канал фильтра должен быть настроен так, чтобы он соответствовал массиву строк для фильтрации.
Таким образом, в вашем FilterPipe
функция преобразования изменяется следующим образом:
transform(value: string[], filterStrings: string[], propName: string): any {
if (value.length === 0 || !filterStrings || filterStrings.length === 0) {
return undefined;
}
const resultArray = [];
for (const item of value) {
if (filterStrings.indexOf(item[propName]) >= 0) {
resultArray.push(item)
}
}
return resultArray;
}
После этого вам нужно добавить код в файл timeline.component.ts
:
Массив для хранения всех активных параметров фильтра:
filteredLocations: string[] = [];
ФункцияЧтобы включить или отключить параметр:
toggle(location) {
let indexLocation = this.filteredLocations.indexOf(location);
if (indexLocation >= 0) {
this.filteredLocations = this.filteredLocations.filter((i) => i !== location);
} else {
this.filteredLocations.push(location);
}
}
Теперь измените шаблон (timeline.component.html
):
Снимите поле выбора.
Добавьте обработчик щелчков в свойкнопка:
<button (click)="toggle(entry.location)" class="btn btn-primary" type="button" *ngFor="let entry of timeLine | filterUnique">{{entry.location}}</button>
И, наконец, фильтр должен принимать новые отфильтрованные местоположения: (Я только что изменил фильтрованное местоположение на фильтрованное местоположение)
*ngFor="let entry of timeLine | filter:filteredLocations:'location'"