无法读取未定义的属性"过滤器"

Saj*_*ran 13 typescript angular

我收到如下错误:

Cannot read property 'filter' of undefined.
Run Code Online (Sandbox Code Playgroud)

组件模板:

<input #input placeholder="Search" id="search">
<div class="item" *ngFor="let item of data | searchPipe: input.value">
  {{item}}
</div>
Run Code Online (Sandbox Code Playgroud)

管道代码:

@Pipe({
  name: 'searchPipe',
  pure: false
})
export class SearchPipe implements PipeTransform {
  transform(data: any[], searchTerm: string): any[] {
    searchTerm = searchTerm.toUpperCase();
    return data.filter(item => {
      return item.toUpperCase().indexOf(searchTerm) !== -1 
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

是什么导致错误?

Sha*_*lya 11

由于传入的数据是null并且该filter方法期望数据,因此,这导致了错误.

这是一个有效的实现:

transform(items: any[], filterQuery: any): any[] {
  if (!filterQuery) return items;
  return items.filter(item => item.whateverProperty.toLowerCase().includes(filterQuery.toLowerCase()));
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*les 5

尝试这个:

export class SearchPipe implements PipeTransform {
  transform(data: any[], searchTerm: string): any[] {
    if(!data) return [];
    searchTerm = searchTerm.toUpperCase();
    return data.filter(item => {
      return item.toUpperCase().indexOf(searchTerm) !== -1 
    });
  }
}
Run Code Online (Sandbox Code Playgroud)