Javascript 在Angular 2中,如何调用承诺中的类方法?
如果我有一个Angular 2组件,并且我从一个返回异步承诺或可观察的服务获取数据,那么我如何调用组件中的方法来显示该数据Javascript 在Angular 2中,如何调用承诺中的类方法?,javascript,angular,promise,Javascript,Angular,Promise,如果我有一个Angular 2组件,并且我从一个返回异步承诺或可观察的服务获取数据,那么我如何调用组件中的方法来显示该数据 @Component({ moduleId: module.id, selector: 'charts', templateUrl: 'charts.component.html', providers: [DataService] }) export class ChartsComponent implements OnInit { construc
@Component({
moduleId: module.id,
selector: 'charts',
templateUrl: 'charts.component.html',
providers: [DataService]
})
export class ChartsComponent implements OnInit {
constructor(private dataService:DataService)
ngOnInit() {
this.getData();
}
getData(){
this.dataService.getData().then(function (data) {
this.drawChart(data);
});
}
drawChart(){
//implement drawing chart
}
}
问题是在“this.drawChart()”中的承诺“this”中不再引用ChartsComponent类。如何调用类方法post promise
另外,我不能将drawChart()放在promise中,因为它需要使用其他类属性。使用时,会保留this
:
getData(){
this.dataService.getData().then((data) => { // <-- changed here
this.drawChart(data);
});
}
getData(){
this.dataService.getData()。然后((data)=>{/有两种解决方案:
1) 使用“自我”:
}
2) 使用“绑定方法”(或类似方法):
您可以找到有关此方法的大量信息,例如:
我更喜欢第一种解决方案,因为它有助于使代码更加透明。谢谢!您帮我省去了很多麻烦。这很好,虽然在我的IDE中留下了语法错误,但还是需要升级工具了。@Paul Arrow函数是一种新语法,在JS的ES6版本中提供。您的IDE可能支持它,但可能需要配置。@acdcjunior在IE11中出现故障-我最初在中测试chrome@Paul是的,IE11不支持它。您必须使用babel或其他工具来传输它。如果IE11需要它,但无法传输,我建议使用类似this.dataService.getData()。然后(函数(数据){this.drawChart(数据);}.bind(this));
谢谢,我正在使用第一种解决方案。
var self = this;
ngOnInit() {
self.getData();
}
getData(){
self.dataService.getData().then(function (data) {
self.drawChart(data);
});
.then(function (data) {
this.drawChart(data);
}).bind(this)