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
})