gpt4 book ai didi

Angular 2. 管道。无法读取未定义的属性

转载 作者:行者123 更新时间:2023-12-05 07:47:57 24 4
gpt4 key购买 nike

我做了一个 pipe

@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>

我遇到了一个错误browser_adapter.js:84 类型错误:无法读取未定义的属性“toLowerCase”在 t.transform (orgFilter.ts:9)

问题出在哪里?这是否意味着 args 没有任何值?我在 html 中使用管道错误吗?

最佳答案

鉴于您提供的模板,看起来 Organization 的实例没有名为“name”的成员,而是一个名为“organizationName”的成员。

也许你可以尝试更换

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

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

在您的代码中。

更新

也就是说,您可以尝试一种不同的方式来绑定(bind)您的过滤器表达式:

@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">

并将管道调用更改为:

<tr *ngFor="#organization of organizations | orgFilter:filterExpression">

根据documentation对于列表过滤器,您可能必须使用以下方法声明您的管道不纯:

@Pipe({
name: 'orgFilter',
pure: false

})

关于 Angular 2. 管道。无法读取未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39129793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com