2016-07-14 51 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

可以緩存這樣說:

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)) 
} 

this._data被緩存的響應,它可以通過設置extractJson

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

這個簡單的...謝謝! – Philipp

+1

但這不會緩存,如果你做頁面刷新 –

+1

@FrancisManojFernnado問題不是關於它。但是如果你需要它,那麼簡單的方法就是使用sessionStorage。在這種情況下,我會將http部分抽象爲單獨的服務,它將首先檢查存儲並初始化服務中的緩存'_data'。或者請求緩存不可用。 – dfsq