Angular2:FilterPipe:无法读取属性';过滤器';未定义的

Angular2:FilterPipe:无法读取属性';过滤器';未定义的,angular,filter,pipe,angular-pipe,Angular,Filter,Pipe,Angular Pipe,我一直在尝试为我的项目构建一个过滤管道,它通过字符串数组进行过滤。这是工作,但我仍然得到一个错误。我想知道这是为什么?我还想问,是否有一种方法可以使过滤器更通用,以便我可以将其用于其他字符串 这是管道: import { Pipe, PipeTransform } from '@angular/core'; import {Afdelingen} from "../models"; @Pipe({ name: 'filter' }) export class FilterPipe impl

我一直在尝试为我的项目构建一个过滤管道,它通过字符串数组进行过滤。这是工作,但我仍然得到一个错误。我想知道这是为什么?我还想问,是否有一种方法可以使过滤器更通用,以便我可以将其用于其他字符串

这是管道:

import { Pipe, PipeTransform } from '@angular/core';
import {Afdelingen} from "../models";

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

  transform(afdeling:Afdelingen[]) {
    return afdeling.filter(afd => afd.afdelingsNaam == 'pediatrie');
    }
}
我的HTML只是为了测试,但它是这样的:

<div *ngFor="let afd of afdeling | filter">
  {{afd.afdelingsNaam}}

</div>

您可以在管道中添加此检查:

transform(afdeling:Afdelingen[]) {
    if (!afdeling)
        return afdeling;
    return afdeling.filter(afd => afd.afdelingsNaam == 'pediatrie');
}

因此,在第一次调用过滤管道时,
afdeling
可能是未定义的。您需要检查管道中的
afdeling
是否有值:)谢谢,这就解决了问题。我还能够制作一个更通用的管道!请提供您的答案,并添加一些说明,说明您的代码如何/为什么解决了这个问题。只有代码的答案被认为是低质量的帖子
import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
   name: 'filterbytag'
 })
export class FilterbytagPipe implements PipeTransform {

transform(items: any[], searchText: string): any[] {
if (!items) return [];
if (!searchText) return items;
searchText = searchText.toLowerCase();
  return items.filter(it => {
  return it.toLowerCase().includes(searchText);
  });
}
}
import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
   name: 'filterbytag'
 })
export class FilterbytagPipe implements PipeTransform {

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