我正在使用Lookup组件,并收到一个错误,即我的数据对象未定义,因此无法.filter()。代码如下:
getAllAccounts() {
this._quickAddService.getAllAccounts()
.subscribe(
accounts => this.getAllAccountsFinished(accounts),
error => this.errorMessage = <any>error);
}
getAllAccountsFinished(accounts:any) {
this.accounts = accounts;
console.log(this.accounts);
this.hideSpinner();
}
ngOnInit(){
this.getAllAccounts();
}
lookup(query: string): Account[] {
if (!query) {
return null;
}
return this.accounts.filter((item) => item.name.toLowerCase().indexOf(query.toLowerCase())>-1);
}
console.log显示,一旦服务完成返回,数据就会正确绑定。但是,当对输入启动查找时,this.accounts是未定义的。
由@bekos在Gitter上回答。需要向组件构造函数添加绑定:
constructor(elementRef:ElementRef, private _quickAddService:QuickAddService) {
this.visible = true;
this.lookup = this.lookup.bind(this);
}
只是关于这一点的一个小评论;-)
也许最好包装您的查找方法,而不是在TypeScript中使用bind
方法,因为您将丢失类型检查。
类似这样的东西:
this.lookup = (query) => {
this.lookup(query);
};
有关更多详细信息,请参阅此链接:
- https://basarat.gitbooks.io/typescript/content/docs/tips/bind.html