【发布时间】:2018-12-10 23:36:00
【问题描述】:
我创建了一个 Angular 7 组件,该组件具有来自 Angular 服务的 observable。我正在使用它将来自远程服务的数据绑定到我的一个页面上的列表。它工作得很好。但是,我注意到的一件事是在订阅异步回调中,如果我使用命名函数而不是匿名函数,则数据不会绑定到我页面上的列表。
这是当前有效的匿名回调示例
public constructor(private vendorApiService: VendorApiService,
private eventMessagingService: EventMessagingService) {
this.vendorApiService.getVendors().subscribe(
(data) => {
this._vendor = data;
this.dataSource = new MatTableDataSource<Vendor>(this._vendor);
this.dataSource.paginator = this.paginator;
});
this._displayedColumns = ['id', 'code', 'name', 'edit'];
}
我想把它转换成这个。但是,这不起作用:
public constructor(private vendorApiService: VendorApiService,
private eventMessagingService: EventMessagingService) {
this.vendorApiService.getVendors().subscribe(
this.setup_vendor_list);
this._displayedColumns = ['id', 'code', 'name', 'edit'];
}
private setup_vendor_list(data) {
this._vendor = data;
this.dataSource = new MatTableDataSource<Vendor>(this._vendor);
this.dataSource.paginator = this.paginator;
}
根据我对 Javascript 的了解,这应该可行。但是,由于这是打字稿,可能有一些我不知道的特殊情况会影响命名和匿名回调的处理方式。
如果您能解释差异,请这样做。
【问题讨论】:
-
你在第二种情况下得到了什么?
-
添加
console.log并尝试在您的函数中记录this。箭头函数不会改变this的值,但命名函数会。这可能是它不起作用的原因。但是,您可以传递一个调用您的函数的箭头函数,如(data) => setup_vendor_list(data)。
标签: angular typescript callback observable angular7