如何对来自订阅的Angular 2“this”关键字引用该类?

时间:2017-07-01 08:07:49

标签: angular typescript observable

我订阅了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()?

2 个答案:

答案 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(){}