Utworzyłem usługę przy użyciu CacheFactory. Spodziewałem się, że będzie to singleton. Wstrzykuję go do kontrolera i działa dobrze w zasięgu kontrolera. Ale gdy przejdę na inną stronę z innym zakresem, wydaje się, że nie mam wartości w pamięci podręcznej, które zapisałem w tym samym kontrolerze w innym zakresie. Czy zachowanie właściwości CacheFactory nie powinno być pojedynczym miejscem, w którym mam te same obiekty w pamięci podręcznej wszędzie, gdzie wstrzykiwam usługę CacheService?Czy CacheFactory w angularjs jest singleton?
To jest mój serwis jako przykład:
angular.module('MyService', []).factory('CacheService', function($cacheFactory) {
return $cacheFactory('cacheService', {
capacity: 3 // optional - turns the cache into LRU cache
})
});
Wtedy w moim kontrolera:
function MyController($scope, CacheService) {
var results= CacheService.get('storedvalue');
if(!results){
CacheService.put('storedvalue', results);
alert('results not stored');
}
else
alert('results stored');
}
Dzięki Josh. Twój przykład działa. A teraz, gdy przyjrzę się bliżej, moje też. Gdzie to nie działa, to jeśli odświeżam przeglądarkę. Które teraz, że myślę o tym, prawdopodobnie ma sens, ponieważ ponownie ładuję angulary po odświeżeniu przeglądarki. Więc w takim razie prawdopodobnie ma sens, że nie będę już miał wartości w pamięci podręcznej zgodziłbyś się? – DavidB
Tak, stan jest w całości powiązany z bieżącym ładowaniem strony. AngularJS (i wszystkie frameworki MVC po stronie klienta) są przeznaczone do stosowania w aplikacjach jednostronicowych (choć nie są do nich ograniczone). Ale możesz użyć pamięci lokalnej, aby przetrwać, jeśli potrzebujesz. Musisz sam napisać tę usługę. –