我订阅了observable,所以当它完成后我需要它从这个类调用一个函数,问题是“this”关键字是指订阅而不是类范围。 代码:
export class GoogleMapComponent{
Position:object;
constructor(public MapFunctionsProvider: MapFunctionsProvider) {
let posObservable = this.MapFunctionsProvider.getPosition();
posObservable.subscribe(data =>{
this.Position = data;
this.createMap();// this keyword refers to the subscription
});
function createMap(){
console.log('run')
}
}
如何在不声明“this”关键字的新变量的情况下调用createMap()?
答案 0 :(得分:2)
在构造函数之外实现该函数。因为this
引用了GoogleMapComponent
类
export class GoogleMapComponent {
Position: object;
constructor(public MapFunctionsProvider: MapFunctionsProvider) {
let posObservable = this.MapFunctionsProvider.getPosition();
posObservable.subscribe(data => {
this.Position = data;
this.createMap(); // this keyword refers to the subscription
});
}
createMap(): any {
console.log('run')
}
}
答案 1 :(得分:1)
这与Angular无关,是ES6的新功能。
当您使用箭头功能()=>()
时,this.
将始终引用类实例,并不重要的是您的嵌套方式。
如果您不想要此行为,仍然可以使用function(){}
。