2017-10-04 7 views
0

私はサービスを休める要求で多くのサービスを持っており、さらに使用するためにサーバから受信したデータをキャッシュしたいと思っています。 現金の返答にはどのような方法が良いと言えますか?角度 - httpレスポンスをキャッシュする最良の方法

+0

のHttpClientドキュメントのキャッシュに関するセクションがあります。あなたはこれまでに何を試しましたか、あなたのためにはうまくいかなかったのですか? https://angular.io/guide/http#caching – Duncan

+0

ありがとうございました! –

答えて

0

あなたはここに複数の回答を見つける:Angular 2 cache observable http result data

私はhttpサーバまたは他の任意の他のソースから取得したデータの管理キャッシュ役立ちます単純なクラスキャッシング可能<>構築することをお勧めします

declare type GetDataHandler<T> =() => Observable<T>; 

export class Cacheable<T> { 

    protected data: T; 
    protected subjectData: Subject<T>; 
    protected observableData: Observable<T>; 
    public getHandler: GetDataHandler<T>; 

    constructor() { 
     this.subjectData = new ReplaySubject(1); 
     this.observableData = this.subjectData.asObservable(); 
    } 

    public getData(): Observable<T> { 
     if (!this.getHandler) { 
     throw new Error("getHandler is not defined"); 
     } 
     if (!this.data) { 
     this.getHandler().map((r: T) => { 
      this.data = r; 
      return r; 
     }).subscribe(
      result => this.subjectData.next(result), 
      err => this.subjectData.error(err) 
     ); 
     } 
     return this.observableData; 
    } 

    public resetCache(): void { 
     this.data = null; 
    } 

    public refresh(): void { 
     this.resetCache(); 
     this.getData(); 
    } 

} 

を用途

宣言可能なキャッシュ<>オブジェクト(おそらくサービスの一部として):

list: Cacheable<string> = new Cacheable<string>(); 

とハンドラ:コンポーネントから

this.list.getHandler =() => { 
// get data from server 
return this.http.get(url) 
.map((r: Response) => r.json() as string[]); 
} 

コール:

//gets data from server 
List.getData().subscribe(…) 

詳細およびコード例はここにある:http://devinstance.net/articles/20171021/rxjs-cacheable

関連する問題