2016-07-14 5 views
2

私は利用可能な言語のリストを提供するLanguageServiceを持っています。 このリストには、バックエンドの要求によって初期化する必要があります:角2 - キャッシュhttp取得結果

getAvailableLanguages(): Observable<Language[]> { 
    ... 
    return this.http.get(ApiResources.LANGUAGE, requestOptions) 
      .map(response => this.extractJson(response)) 
      .catch(error => this.handleError(error)); 
} 

私はバックエンドに別のサービスがlanguageService.getAvailableLangauges()呼び出すたびに要求しないようしたいと思います。

必要な最初のリクエストの結果をキャッシュするにはどうすればよいでしょうか?

答えて

3

あなたはこのようにそれをキャッシュすることができます:シンプルで...ありがとうございこと

extractJson(res) { 
    let json = res.json() 
    // something, set this._data ... 
    return this._data 
} 
+0

this._dataextractJsonで設定することができ、キャッシュされた応答である

import { Observable } from 'rxjs/Observable' import 'rxjs/add/observable/of' // ... getAvailableLanguages(): Observable<Language[]> { return this._data ? Observable.of(this._data) : this.http.get(ApiResources.LANGUAGE, requestOptions) .map(response => this.extractJson(response)) .catch(error => this.handleError(error)) } 

! – Philipp

+1

しかし、ページリフレッシュを行うとキャッシュされません。 –

+1

@FrancisManojFernnado質問はそれに関するものではありません。しかし、あなたがそれを必要とするならば、簡単なアプローチはsessionStorageを使うことです。この場合、httpパーツを別のサービスに抽象化して、まずストレージをチェックし、キャッシュされた '_data'をサービスで初期化します。または、キャッシュが利用できない場合はリクエストしてください。 – dfsq

関連する問題