2016-04-19 2 views
4

Observableをサービスで使用するAngular 2 Appでは、内部のクラスのプライベートフィールドをどのように参照できますかmap?下のコードに示すように、extractData関数内のthis._dataStoreをどのように参照できますか?ありがとう!角2:Observable mapによって呼び出される関数内のクラス変数を参照する方法

私は() => {function body here}の中に関数本体を置くことを示唆していたthis questionを見ましたが、実際にはこのロジックがおそらく他の場所で使用されることを望んでいます。コピーした場所の上にそれをすべて貼り付け)

@Injectable() 
export class DataService{ 
    constructor(private http: Http){} 
    private _dataStore = []; 

    getData(): Observable<any> { 
    if(this._dataStore.length > 0) { //return cached data 
     return Observable.of(this._dataStore); 
    } else { 
     return this.http.get('url') 
        .map(this.extractData) 
        .catch(this.handleError); 
    } 
    } 

    private extractData(res: Response){ 
    if(res.status < 200 || res.status >= 300){ 
     throw new Error('Bad response status '+ res.status); 
    } 
    var data = res.json(); 
    for (var i in data['items']){ 
     this._dataStore.push(data['items'][i]); //ERROR this._dataStore undefined 
    } 
    return this._dataStore; 
    } 

答えて

5

あなたは矢印の機能にextractDataへのコール全体をラップすることができます。

this.http.get("url") 
     .map(data => this.extractData(data)) 
     .catch(err => this.handleError(err)) 

お知らせは、私がthis.handleErrorのために同じことをやりました。このテクニックでは、電話中にthisの参照が保持されます。

関連する問題