2016-06-20 26 views
0

私はAngular2アプリケーションを構築しています。 myServiceに非同期機能deleteObjectがあります。それは約束を返す。私はコンポーネントをrefreshと呼ばれる別の機能を持っています。これはページをリフレッシュします。プロミスの内部からリフレッシュを呼び出すにはどうすればいいですか?これは私が試したものです:Angular2:コールバック関数内で他の関数を呼び出す

export class AppComponent{ 

    refresh(){ 
     // refresh page here 
    } 

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

答えて

7

のようにそれを達成することができ、コンポーネントコンテキストへの参照です。彼らはあなたが期待する文脈を維持します(this)。

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

ありがとうパトリック。私はTypescriptについてはこれが正解だと思います。 :) – UnderWood

1

これは文脈の問題です。 "this"は、コールバック関数のコンテキストを指します。あなたが実際に欲しいのはあなたが活字体でコーディングされている場合は、代わりにfat arrow functionsを使用することができますので、

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

FWIW、あなたは[rxjsの観測]に見ることができる(http://blog.angular-university.io/functional-reactive-programming-for-:だからこれにより

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

を置き換えますangle-2-developers-rxjs-and-observables /)は、強力な角度パラダイム(技術的にはrxjsパラダイムですが、それらを組み込みます) – kirinthos

+0

ありがとう@kirinthos。私はJavascriptを初めて使っています。それは私のために働いた。 :) – UnderWood

+0

@UnderWood [closures](https://developer.mozilla.org/en/US/docs/Web/JavaScript/Closures)に – kirinthos

関連する問題