2013-03-23 5 views
5

私はCacheFactoryを使用してサービスを作成しました。私はそれがシングルトンであることを期待していました。私は私のコントローラにそれを注入し、それはコントローラの範囲内で正常に動作します。しかし、いったん別のスコープを持つ別のページに行くと、別のスコープで同じコントローラに保存されたキャッシュ内の値を持つようには見えません。 CacheFactoryの動作は、私がCacheServiceを注入するどこでも同じキャッシュされたオブジェクトを持つシングルトンではないでしょうか?angularjsのCacheFactoryはシングルトンですか?

これは例として私のサービスである:私のコントローラで次に

angular.module('MyService', []).factory('CacheService', function($cacheFactory) { 
     return $cacheFactory('cacheService', { 
      capacity: 3 // optional - turns the cache into LRU cache 
     }) 
    }); 

function MyController($scope, CacheService) { 
    var results= CacheService.get('storedvalue'); 
    if(!results){ 
     CacheService.put('storedvalue', results); 
     alert('results not stored'); 
    } 
    else 
     alert('results stored'); 
} 

答えて

16

$cacheFactoryは、実際に使用したいサービスではありません - それはあなたがに使う工場です使用したいシングルトンサービスを作成してください。あなたのコードを見て、それはうまくいくようです。しかし、私は先に進んで、そのことを証明するデモを作成しました。ここで、サービスがあります。この例では

.factory('CacheService', function($cacheFactory) { 
    var cache = $cacheFactory('cacheService', { 
    capacity: 3 // optional - turns the cache into LRU cache 
    }); 

    return cache; 
}); 

CacheServiceは、我々はサービスから返すものです$cacheFactoryで作成したローカルキャッシュを持っているシングルトンです。これを任意のコントローラに注入することができ、常に同じ値を返します。

はここで働いてPlunkerです:


http://plnkr.co/edit/loKWGms1lMCnmiWa1QA7?p=previewあなたの投稿があなたのコードを破ったものを含んでいない何らかの理由で、それを破るために私Plunkerを更新すること自由に感じなさい、私たちはそこから行くことができます。

+0

ありがとうございました。あなたの例が働く。そして、私が近づくにつれて私もそうしています。それがうまくいかないのは、ブラウザをリフレッシュする場合です。今、私はそれを考えると、ブラウザをリフレッシュするときに再び角度をつけてブートストラップするので、おそらく意味をなさないでしょう。だから、その場合はおそらく私はもはやあなたが同意するキャッシュの値を持っている意味がありますか? – DavidB

+1

はい、状態は現在のページの読み込みに完全にバインドされています。 AngularJS(およびすべてのクライアント側のMVCフレームワーク)は、シングルページアプリケーションで使用することを意図しています(ただし、これらに限定されません)。しかし、必要に応じてローカルストレージを使用して永続化することができます。あなたは自分でサービスを書くだけです。 –

関連する問題