1

我正在使用 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 是未定义的。

4

2 回答 2

2

@bekos 在Gitter上回答。需要为组件构造函数添加绑定:

constructor(elementRef:ElementRef, private _quickAddService:QuickAddService) { 
    this.visible = true;

    this.lookup = this.lookup.bind(this);
}
于 2016-05-13T15:30:44.997 回答
0

只是对此的一个小评论;-)

包装你的查找方法而不是使用bindTypeScript 中的方法可能会更好,因为你会丢失类型检查。

像这样的东西:

this.lookup = (query) => {
  this.lookup(query);
};

有关详细信息,请参阅此链接:

于 2016-05-13T17:12:45.330 回答