Angular 角度2。管。无法读取未定义的属性

Angular 角度2。管。无法读取未定义的属性,angular,pipes-filters,Angular,Pipes Filters,我做了一个烟斗 @Pipe({ name: 'orgFilter' }) export class OrgFilterPipe implements PipeTransform { transform(orgs: Organization[], args: String[]): any { console.log(orgs) let filter = args[0].toLowerCase(); return filter ? orgs.f

我做了一个烟斗

@Pipe({
  name: 'orgFilter'
})
export class OrgFilterPipe implements PipeTransform {
    transform(orgs: Organization[], args: String[]): any {
        console.log(orgs)
       let filter = args[0].toLowerCase();
       return filter ? orgs.filter((org:Organization) => org.name.toLowerCase().indexOf(filter) != -1): orgs;
}
并在html中使用它:

<tbody>
        <tr *ngFor="#organization of organizations | orgFilter:listFilter.value">
            <td>{{ organization.organizationName }}</td>
            <td>{{ organization.city }}</td>
            <td>{{ organization.state }}</td>
            <td>{{ organization.country }}</td>
            <td>
                <i class="material-icons">mode_edit</i>
            </td>
            <td>
                <i class="material-icons">delete</i>
            </td>
        </tr>
        <tr>
            <td>
                <div class="col-md-4"><input type="text" #listFilter (keyup)="0" /></div>
            </td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
</tbody>

{{organization.organizationName}
{{organization.city}}
{{organization.state}
{{organization.country}
编辑模式
删除
我犯了一个错误 browser_adapter.js:84 TypeError:无法读取未定义的属性“toLowerCase” 在t变换时(orgFilter.ts:9)

问题在于let filter=args[0].toLowerCase()

是什么原因造成的?这是否意味着args没有任何值?我应该在什么地方申报吗?我在html中是否使用了错误的管道?
如果我移除管道,我会看到带有数据的表格。但是当我把它放到html中时,数据消失了,表中只有这个输入字段,要么是未定义的
args
,要么是未定义的
org.name
。您可以尝试在DevTools中调试它,或者在
transform()

的开始处设置断点。根据您提供的模板,组织实例似乎没有名为“name”的成员,而是名为“organizationName”的成员

也许你可以试着换一个

org.name.toLowerCase().indexOf(filter) != -1

在你的代码中

更新

也就是说,您可以尝试另一种绑定过滤器表达式的方式:

@Pipe({
  name: 'orgFilter'
})
export class OrgFilterPipe implements PipeTransform {
    transform(orgs: Organization[], expression:string): any {
       if(!expression){
            return orgs;
       }
       else {
            return orgs.filter((org:Organization) => org.organizationName.toLowerCase().indexOf(expression) != -1)
       }
} 
其中表达式指的是组件的一个成员,例如:

filterExpression: string;
然后将输入文本更改为:

<input type="text" [(ngModel)]="filterExpression">

我试过了,但没用。问题在于let filter=args[0].toLowerCase();这是否意味着错误是由没有值的args(如果我理解正确的话,它是我想要过滤的词)引起的?但是当我刚刚打开页面时,它不能有值。正确的?
<input type="text" [(ngModel)]="filterExpression">
<tr *ngFor="#organization of organizations | orgFilter:filterExpression">
@Pipe({
  name: 'orgFilter',
  pure: false

})