如何从Javascript回调方法调用Typescript方法 - Angular2

时间:2017-01-23 18:25:14

标签: javascript angular typescript

我正在使用angular2我的问题是我无法从javascript回调调用组件方法这里是代码片段。

 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');
 }

2 个答案:

答案 0 :(得分:1)

访问全局this的一种方法是使用bind,如下所示:

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

现在这段js代码coreApi.callApi(request, this.afterCallApi);如你所知会调用this.afterCallApi但请注意你正在使用没有paranthesis()的函数,这意味着this.afterCallApi将被调用为callApi的内部函数,callApi&#39}内部this绑定到afterCallApi

如果您想对其进行测试,请使用原始代码在console.log(this);afterCallApi进行测试。您会看到this是一个对象,而不是全局this

为了提供"访问"至afterCallApi我们只需bind引用全球this的{​​{1}}。

另请查看这篇精彩帖子以获取更多信息:How to access the correct `this` inside a callback?

答案 1 :(得分:0)

如果您使用箭头格式定义函数,它将为您保留this的范围。

示例:

var afterCallApi = (status, response) => { this.postCreateInstrument(accountNumber); }