Я использовал руководство , чтобы отфильтровать поиск, используя одно свойство (имя) из таблицы результатов и то, что работает так, как я хочу, блестяще, но как я могу адаптировать канал для поиска по нескольким свойствам (например, SpeciesName, EnclosureName и т. д. )?

Труба:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'filter'
})
export class FilterPipe implements PipeTransform {

  transform(items: any[], searchText: string): any {
    if(!items) return [];
    if(!searchText) return items;
    searchText = searchText.toLowerCase();
    return items.filter( it => {
      return it.Name.toLowerCase().includes(searchText);
    });
  }

}

Html:

<section>
    <div class="toolbar">
        <input id="fur-filter" [(ngModel)]="searchText" class="filter" placeholder="FILTER ANIMALS, SPECIES, ENCLOSURES, TEMPERAMENTS ETC." />
        <button id="AddNewAnimal" class="ko-btn">Add New Animal</button>
        <button id="InspectionReport" class="ko-btn">Start Inspection Report</button>
    </div> 
    <div class="list-container">
      <div class="animal-row" *ngFor="let furries of animalsFur | filter : searchText">
        <img [src]="furries.avatar" />
        <div class="animal-info">
          <p>{{furries.Name}} {{furries.Nickname}}</p>
          <div class="row">
            <div id="species" class="col">
              <p id="species-text">Species: <span>{{furries.SpeciesName}}</span></p>
            </div>
            <div class="col">
              <p>Sub-Species: <span>{{furries.SubSpeciesName}}</span></p>
            </div>
            <div class="col">
              <p>Arrived: <span>{{furries.Welcomed}}</span></p>
            </div>
            <div class="col">
              <p>Age: <span>{{furries.Age}} Years</span></p>
            </div>
            <div class="col">
              <p>Enclosure: <span>{{furries.EnclosureName}}</span></p>
            </div>
            <div class="col">
              <p>Temperament: <span>{{furries.Temperament}}</span></p>
            </div>
          </div>
        </div>
      </div>
     </div>
  </section>
0
Web Develop Wolf 19 Сен 2018 в 19:03

2 ответа

Лучший ответ

Вы просто можете использовать && (и) или || (или), чтобы решить эту проблему:

return items.filter( it => {
    return it.Name.toLowerCase().includes(searchText) 
    || it.SpeciesName.toLowerCase().includes(searchText) // add more conditions
});
1
Batajus 19 Сен 2018 в 16:09

Заменить оператор возврата на:

return it.Name.toLowerCase().includes(searchText)||
it.Nickname.toLowerCase().includes(searchText)||
it.SpeciesName.toLowerCase().includes(searchText)||
.
.
.
.
;
1
Issam EL-GUERCH 19 Сен 2018 в 16:09