Угловая труба для поля поиска

У меня есть канал, который фильтрует поле поиска и отображает список элементов в соответствии с текстом поиска. В настоящее время он фильтрует только companyDisplay. Цель состоит в том, чтобы отфильтровать companyCode и companyDisplay

JSON

[{
    companyDisplay: "ABC",
    companyName: "EFG",
    companyCode: "1234"
}]

Поисковая труба

import { Pipe, PipeTransform } from '@angular/core'; // serach text sorting
@Pipe({
    name: 'searchCompanyPipe'
})
export class SearchPipe implements PipeTransform {
  transform(items: any[], searchText: any): any[] {
    if (!items) { return []; }
    if (!searchText) { return items; }
    searchText = searchText.toLowerCase();
    return items.filter(i => {
      return (i.companyDisplay || i.companyCode).toLowerCase().includes(searchText);
    });
  }
}

HTML

<li *ngFor="let data of companyInfo| searchPipe:searchValue">

companyInfo содержит json.


person user123    schedule 31.07.2018    source источник
comment
Я написал сообщение в блоге о том, почему вам следует рассмотреть возможность не использования конвейера для фильтрации вместе с альтернативными реализациями: blogs.msmvps.com/deborahk/filtering-in-angular   -  person DeborahK    schedule 31.07.2018


Ответы (1)


Проблема здесь в том, что следующий код:

(i.companyDisplay || i.companyCode)

всегда возвращает companyDisplay, если это не ложное значение. Вам нужно использовать что-то вроде:

return i.companyDisplay.toLowerCase().includes(searchText) || i.companyCode.toLowerCase().includes(searchText);
person ischenkodv    schedule 31.07.2018
comment
Приведенный выше код не фильтрует companyDisplay или companyCode. Он выдает Невозможно прочитать свойство toLowerCase неопределенной ошибки. Любые другие идеи? Спасибо. - person user123; 31.07.2018
comment
Это сработало. у некоторых объектов в json отсутствовал код компании, который возвращал неопределенную ошибку. Спасибо - person user123; 31.07.2018