2017-10-18 7 views
0

私は、typescriptプロジェクトとより具体的な角度アプリケーションを持っています。新しいクラスのメソッド内でメソッドを作成します。

私はTestという名前のクラスを持っています(角度のコンポーネントを想定することができます)、通常はthis.http( '/ endpoint')のように使用されるhttpサービスにアクセスできますsubscribe(response => {}) ;

私はいくつかのロジックを間に追加し、別々のメソッドに分割する必要があります(コードは私の例より少し複雑です)。 }

iはthis.http.get( '/エンドポイント')を呼び出す

export class Test { 

init() { 
    this.http.get('/endpoint').map(this.transform); 
} 

transform(data) { 
    // more logic here in isolated scope 

    this.accessOutside(data); // I cannot access this method, isolated scope. 
    // How to break down some logic into separate methods to access them 
    // or how to create it new method within method? 

    return data 
} 

accessOutside(data) { 
    // more logic 
} 

。マップ(this.transform)私の方法は、単離され、テストクラス内の他のメソッドへのアクセスを持っていません "変換" 、どのようにそれにアクセスする方法またはどのように変換メソッド内のメソッドを作成する?

答えて

1

あなたはthisの概念がないtransform機能、のコピーを渡しているこの

this.http.get('/endpoint').map(this.transform);

ようmap関数にtransform関数を渡します。その結果、map関数がtransform関数のコピーを呼び出すと、そのコンテキストはデフォルトでwindowオブジェクトになります。したがって、transformメソッドのコピーでは、windowオブジェクトでaccessOutsideというファンクションが検索されます。

この問題を解決する最も簡単な方法は、次のようにラムダ関数を使用することです:arrow funcitonsとして

this.http.get('/endpoint').map(data => this.transform(data));

mapが矢印関数を呼び出すとき、彼らはで定義されているコンテキストの範囲へのアクセス権を持っていますthisは、Testのインスタンスを指し、window

+0

ではありません。まさに私が望むもの。ありがとうございました! –

関連する問題