2017-01-23 13 views
0

私はangle2を使用しています。私の問題は、javascriptコールバックからコンポーネントメソッドを呼び出すことができないことです。ここではコードスニペットです。グローバルthisにアクセスする方法はJavascriptコールバックメソッド - Angular2からTypscriptメソッドを呼び出す方法

declare var CORE_FACTORY:any; 

// CORE_FACTORY Defined in javascript file which I've included in index.html and it's gets loded perfectly. 

let coreApi = CORE_FACTORY.setupApiByDomain(Domain.QA); 
coreApi.addUserEventListener(apiName, ApiEvent.ON_ANY_EVENT,this._userCallBack); 
coreApi.callApi(request, this.afterCallApi); 

afterCallApi(status, responceObject) { 
      this.postCreateInstrument(accountNumber); //Getting error right here. 
} 

public postCreateInstrument(accountNumber:string) { 
     alert('test'); 
} 
+0

それは最終的にすべてのJavaScriptです。 TypeScriptは、ブラウザがそれを解釈する前に、JavaScriptに(技術的には、トランシル)コンパイルします。 –

答えて

1

一つのこのようbindを使用することです:あなたはthis.afterCallApiを呼んでいますが、使用していることに注意します知っているように今

coreApi.callApi(request, this.afterCallApi.bind(this, status, responceObject)); 

JSコードcoreApi.callApi(request, this.afterCallApi);のこの部分をこれは、callApiの内部のcallApiの内部関数としてthis.afterCallApiが呼び出され、afterCallApiにバインドされたの内部であることを意味します。

console.log(this);afterCallApiに元のコードを入れてテストします。 thisはオブジェクトであり、グローバルではないことがわかりますthis

「アクセス」をafterCallApiに与えるために、我々は単にbindthisを指します。これはグローバルthisを指しています。

また詳細は、この偉大なポストを確認してください。How to access the correct `this` inside a callback?

+1

素晴らしい!それは動作します..ありがとうございます.. –

+0

論理を詳しく教えてください..お願い... –

+0

@DhirajSingh確かに私は答えを更新します – echonax

0

あなたは矢印の形式を使用して関数を定義した場合、それはあなたのためにthisの範囲を維持します。

例:

var afterCallApi = (status, response) => { this.postCreateInstrument(accountNumber); } 
関連する問題