2016-08-07 5 views
1

私はここで何かを逃しているように感じる。私はいくつかのデータを取得するサービスを持っています。私はそれを約束に変え、別の方法でデータを試してみる。角2.プロミスの範囲を失う

このメソッドにヒットしたら、私はいつもthis.whateverからアクセスするオブジェクトにアクセスする能力が失われます。 thenブロック内のaddJobsToTreeからすべてのコードを残すと、正常に動作します。私はまた、コンポーネント内のどこからでもこれにアクセスできます。私は何かばかげたことをしていると確信していますが、それを理解することはできません。

ngOnInit(){ 
    this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004) 
     .toPromise() 
     .then(this.addToJobsTree); 
} 
private addToJobsTree(res){ 
    for(let xx of res){ 
     this._sharedService.jobs.push(xx); //Comes back as cannot read _sharedService of null 
     console.log(this._sharedService.jobs); 
    } 
} 
+0

[内部の正しい\ 'this \ /コンテキストにアクセスする方法コールバック?](http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside-a-callback) –

答えて

7

これは、関数を参照しているために関数のコンテキストが失われたためです。これを修正するには、関数をオブジェクトに明示的にリンクする必要があります。 (ノート:ここに活字体でbindメソッドを使用しての欠点である:https://basarat.gitbooks.io/typescript/content/docs/tips/bind.html)は

ngOnInit(){ 
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004) 
     .toPromise() 
     .then(this.addToJobsTree.bind(this); // <----- 
} 

または矢印機能それを修正するために

あなたはbind方法のいずれかを使用することができます。

ngOnInit(){ 
this._scheduleDataService.getSavedScheduleData(this.buildDateStringFromCalendar(),1004) 
     .toPromise() 
     .then((data) => { // <----- 
     this.addToJobsTree(data); 
     }); 
} 
+0

ありがとう。 'bind(this)'を使って動作しました。 – BlueBird