【发布时间】:2018-09-30 07:52:54
【问题描述】:
在过去的几天里,我一直遇到一个问题,我似乎无法在任何地方找到解决方案。 背景: 我有一个 typescript 类定义如下:
export class Client extends Person {
claimNumber: string;
policyNumber: string;
address: string;
insuranceCompany: Organisation = new Organisation();
toString(): string {
return this.policyNumber
.concat(this.claimNumber);
}
}
以上用作驱动 angular 5 模板的模型。在我的组件中,我从远程 api 获取(使用 angular 5 HttpClient)客户端列表并生成 html 表行。生成表行的 LOC 是:
<tr *ngFor="let client of clients | filter:searchString"> ... </tr>
上面的 searchString 是绑定到搜索输入标签的属性,而 filter 是定义为的自定义过滤器管道如下:
export class FilterPipe implements PipeTransform {
transform(items: Client[], term: string) {
if (term == undefined || term === '') return items;
return items.filter(item =>item.toString().toLocaleLowerCase().includes(term.toLocaleLowerCase()));
}
}
问题: 当我在上面的过滤器管道中检查 item.toString() 时,它返回 [object Object] 而不是由 policyNumber 和 claimNumber 组成的字符串。
调查: 我对这个问题进行了如下调查:我将 Client 类实例化如下:
let c = new Client();
c.policyNumber = 'ababababa';
c.claimNumber = 'aaaaaaa';
console.log('client toString() is => ' + c.toString());
有趣的是,上面的 console.log 输出:'ababababaaaaaaaa'。
问题: 我做错了什么导致过滤器管道中的 item.toString() 返回 [object Object] 而我实例化的类上的 toString() 返回正确的字符串?
【问题讨论】:
-
您没有检查过滤器中的 item.toString(),而是检查了 policy 和 claimNumbers? API 的数据是如何来的?它看起来怎么样?
-
我认为您的问题的解决方案在this answer。
-
非常感谢您分享这些链接,它们为找到解决我的问题做出了巨大贡献。
标签: javascript angular typescript