2016-08-22 21 views
5

私はマップのオペレータによって呼び出されるメソッドでそれを戻す前に私のデータを変更しようとしていたと私はその方法のすべての私の他の変数の外には、私が書いたundefined観察可能な範囲の変更

あることが判明私は何を意味するかを表すためにダウンし、ここで簡単なコードは、ログに記録テスト変数はundefinedとして返されます。

import {Observable} from "rxjs/Observable"; 
import {Injectable} from "@angular/core"; 
import {Http, Response} from "@angular/http"; 

@Injectable() 
export class DataService { 
    private API_URL= 'url...'; 

    private test = 1; 

    constructor(private http: Http) {} 

    getData(): Observable<any> { 
     return this.http.get(this.API_URL) 
      .map(this.extractData) 
      .catch(this.handleError); 
    } 

    private extractData(res: Response) { 
     let body = res.json(); 

     console.log(test); 

     return body.data || {}; 
    } 
} 

私はこれが起こっている理由を知りたいと思ったし、それがどのように取得したデータを変更する方法はない場合、私はそれを行うことができます私は別の変数に基づいてデータを変更したいので、サービス内で(加入者コンポーネントではない)あなたが保持する.bind(this)

return this.http.get(this.API_URL) 
     .map(this.extractData.bind(this)) 
     .catch(this.handleError.bind(this)); 

または矢印機能

return this.http.get(this.API_URL) 
     .map(val => this.extractData(val)) 
     .catch(err => this.handleError(err)); 

を使用する必要がJS "機能" ;-)

加入者のコンポーネントとは何の関係も)

+1

Typo?メソッドは 'extractSemanticData'または' extractData'と呼ばれますか? – cartant

+0

私は貼り付けています。私はそれを編集します。おかげで – Nima

答えて

5

ません持っていること範囲はthis

+1

それは動作します、ありがとう@GünterZöchbauer!.私はこれを解決しようと数時間を費やしました。私は怠惰な読み込みのために起こっていると思っていました。しかし、そうではありませんでした。 –

関連する問題