2016-07-05 14 views
0

$ http.get()で取得するサービスを作成しました。

私のサービスは、いくつかのUI要素をレンダリングする指示文で使用されます。サービスは非同期です。これは、myService.getStuff()のような指示コードで使用され、$ http.get promiseのコールバック内からカスタマイズされた約束を返します。

しかし、私のサービスでは、アプリケーションのライフサイクル中に$ http.getを1回呼び出すだけです。 http.getレスポンスをキャッシュします。

だから、私は自分のhtmlでこのディレクティブを2回使います。それで、これは私が望むものです。最初にそれを呼び出すと(すぐに戻り、)$ http.get経由でものを取り出します。 2回目に呼び出されると、$ http.getへの未処理呼び出しが検出されます。したがって$ http.getへの別の呼び出しは行いませんが、何とか最初の呼び出しの戻りを待っています。

答えて

2

あなたは$http

return $http.get(/*...*/, { cache: true }).then(/*...*/); 

またはちょうどあなたのサービスで約束をキャッシュの内部cacheを使用する場合があります。あなたがuirouterを使用している場合

function MyService($http) { 
    var promise; 

    this.get = function() { 
     promise = promise || $http.get(/*...*/).then(/*...*/); 
     return promise; 
    } 
} 

は、別の方法は、親状態のデータresolveにあり、そして、すべてのコンポーネントに分解さデータを注入します。これまでの任意の後続の呼び出しは、キャッシュされた値を使用します

$http.get(yourUrl, {cache: true}) 
    .then(...) 

+0

あなたは関数内に余分な 'var'を持っています。それは外部の 'promise'変数への代入である必要があります。 – Duncan

+0

@Duncan thx、 – hansmaad

+0

を編集してキャッシュをtrueに設定すると、内部的に応答をキャッシュするかどうかにかかわらず、私が避けたいのは$ http.get()を呼び出しているので、私の場合は機能しません。 しかし、あなたがキャッシングを書いているときには、私のサービスの約束はもっと線に沿っているかもしれません。これは、私が同じ約束を何度も返すことを意味し、サービスが呼び出されるたびに異なるコールバック関数を設定します。いいですか? –

関連する問題