2017-07-01 10 views
0

私はobservableのサブスクリプションを持っているので、終了すると、このクラスから関数を呼び出す必要があります。問題は "this"キーワードがサブスクリプションを参照し、クラススコープではありません。 コード:私は "この" キーワードの宣言新しい変数なしcreateMap()を呼び出すことができますどのように角度2での使用 "subscribe"の "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') 

    } 
} 

+4

いいえ「this」はGoogleMapComponentオブジェクトを指します。しかし、GoogleMapComponentにはcreateMap()という名前のメソッドはありません。 createMap()はコンストラクタ内で定義された関数です。コードを正しくインデントすると、すべてがより明確になります。 createMap()の定義をそのままにしたい場合は、 'this.createMap()'の代わりに 'createMap()'を使います。 –

答えて

2

はconstructor.because 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') 

    } 
} 
+3

または 'this'を使用しないでください –

1

を指し、これは角度とは何の関係もありませんし、ES6新機能です。

いつも矢印機能()=>()を使用しているときは、this.は常にクラスインスタンスを参照し、どのようにネストしても問題ありません。

function(){}は、この動作をしたくない場合でも使用できます。