查找时未定义数据对象



我正在使用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

最新更新