【问题标题】:angular 2 - cache http get result角度 2 - 缓存 http 获取结果
【发布时间】:2016-07-14 12:52:01
【问题描述】:

我有一个提供可用语言列表的 LanguageService。 此列表需要由后端请求初始化:

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

我想避免每次另一个服务调用 languageService.getAvailableLangauges() 时都请求后端。

什么是缓存必要的第一个请求的结果的好方法?

【问题讨论】:

    标签: angular angular2-http


    【解决方案1】:

    你可以这样缓存它:

    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
    }
    

    【讨论】:

    • 这么简单...谢谢!
    • 但是如果你刷新页面,这不会缓存
    • @FrancisManojFernnado 问题不在于它。但是,如果您需要它,那么简单的方法是使用 sessionStorage。在这种情况下,我会将 http 部分抽象为单独的服务,该服务将首先检查存储并在服务中初始化缓存的_data。或者在缓存不可用时发出请求。
    • @dfsq 感谢您的回复 :) ,关于在 angular2 中使用会话存储的任何文章或教程?
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多