Angular2:在回调函数内调用其他函数

时间:2016-06-20 22:33:55

标签: javascript asynchronous angular asynccallback

我正在构建一个Angular2应用程序。 我在deleteObject中有一个异步函数myService。它返回一个Promise。我在Component中有另一个名为refresh的函数,它刷新了页面。如何从Promise内部调用refresh。这就是我试过的:

export class AppComponent{

    refresh(){
        // refresh page here
    }

    delete(){
        this.myService.deleteObject(params).then(
           function(data){
             //this.refresh() doesn't work here.
        });
    }
}    

2 个答案:

答案 0 :(得分:8)

如果您使用Typescript进行编码,则可以使用fat arrow functions代替。它们保留了您期望的this上下文。所以替换

delete(){
        this.myService.deleteObject(params).then(
           function(data){
             //this.refresh() doesn't work here.
        });
}

有了这个:

delete(){
    this.myService.deleteObject(params).then(
            (data)=>{
                //this.refresh() should work here
            }
    );
}

答案 1 :(得分:1)

这是一个背景问题。 “this”指的是回调函数的上下文,它可能是承诺或其他东西。你真正想要的是对组件上下文的引用,你可以像这样实现

delete(){
    var componentRef = this; // colloquially "that" or "self"
    this.myService.deleteObject(params).then(
       function(data){
         componentRef.refresh() // does work here.
    });
}