2017-11-09 7 views
0

私はAPIから顧客データを集めています。サービスでキャッシュしたいので、データが異なるだけで、複数のHTTPリクエストを行わずに異なるクエリを返す関数にアクセスできます毎月更新されます。このようなもの。このロジックは私のサービスまたはコンポーネントに属していますか?角2+

data; 

getData() { 
    if (this.data) 
    return Observable.of(this.data); 

    return this.http.get(***********) 
    .map(response => { 
     this.accounts = response; 
     return this.accounts; 
    }); 

それから私は、コンポーネントがテーブルなど

getDataForSomethingById(id) { 
    return this.getData() 
    .map(result => { 
     //get the data into the right shape 
); 

とコンポーネントで表示するために右の形で、特定のデータを取得するために呼び出すことができるサービスで機能を持っている...

this.dataService.getDataForSomethingById(1) 
    .subscribe(result => this.tableData = result); 

コンポーネントは初期化時にこれらの関数の多くを呼び出して、複数のhttp呼び出しを呼び出すことがあります(1回目のth応答が受信される前にすべて購読してください)。 私の質問は、私はこれについて正しい方向に行きますか?サービスがこのロジックの正しい場所か、このロジックが自分のコンポーネントにあるかどうか。

this.dataService.getData() 
    .subscribe(result => { 
    this.tableData = this.processTable(result); 
    this.someListData = this.getListData(result); 

または私は何とかサービスでこのような何かを行うことができます

//Initialize this as an observable the the functions can wait until it loads? 
data; 

// call this on login to get the data 
getData() { 
    if (this.data) 
    return Observable.of(this.data); 

    return this.http.get(***********) 
    .map(response => { 
     this.accounts = response; 
     return this.accounts; 
    }); 

getDataForSomethingById(id) { 
//wait for the data to load 
//process the data 
//return it to the component 
} 

ちょうど私が書くように、私はそれを取得するための責任を負わなければならないデータを表示するコンポーネントに傾いています。このことを考えから正しい形で、サービスは生のデータを取得/キャッシュするだけですか?

+0

あなたは正しいと思います。しかし、すべてのコンポーネントをあまりにもスマートにしないでください。サービスからデータを取得する方法を知っているスマートコンポーネントをいくつか持ち、そのすべての子(ダミーコンポーネント)には親によってデータが移入されます。また、ng-appの状態を管理する方法として** ngrx **を学ぶことをお勧めします。 –

答えて

0

これは、APIを照会するサービスを使用してデータをキャッシュする方法によって異なります。コンポーネントでこのデータが必要な場合は、アプリケーションの標準形式でデータをマップすることですその形式で要求してから、ビューのカスタム形式でマップすることができます。

関連する問題