обновить $cacheFactory с контроллера

Можно ли добавить значения в мой $resource $cacheFactory с моего контроллера и синхронизировать эти данные между несколькими контроллерами? По сути, я пытаюсь выполнить следующее:

1) получить ресурс JSON из API

2) манипулировать JSON так, как если бы он больше не был ресурсом $, а просто простым объектом JSON, который я могу использовать между контроллерами.

Есть ли «угловой способ» сделать это или я должен просто кэшировать весь список мест, используя локальное хранилище, и читать и записывать оттуда все остальное?

.factory('places', ['$resource','environment','$cacheFactory',
    function($resource, environment, $cacheFactory) {
    var cache = $cacheFactory('places');
        return $resource(environment.apis.places, {}, {
            query: {
                isArray:true,
                method: 'GET',
                cache: cache
            }
        });
    }
])

.controller('ItemCtrl', function($scope, places) {
    places.query({}, function(result){

        $scope.item = result[0]
    })

    $scope.makeFav = function(index){
        //add a new key to cached places data 
        $scope.item.fav = true
    }
}

.controller('ListCtrl', function($scope, places) {
    places.query({}, function(result){

        $scope.item = result  //should get the updated cache changed by ItemCtrl
    })

    console.log($scope.item[0].fav)  //should = true
}

person Justin Young    schedule 09.10.2015    source источник
comment
Возможный дубликат Является ли CacheFactory в angularjs синглтоном?   -  person Paul Sweatte    schedule 01.12.2015


Ответы (1)


Используйте следующий процесс:

  • Создайте постоянный рецепт
  • Ввести cacheFactory
  • Создайте экземпляр cacheFactory
  • Введите константу в каждый контроллер
  • Ссылка на экземпляр cacheFactory
  • Управление экземпляром cacheFactory в каждом контроллере

    function sharedCache($cacheFactory)
       {
       var sharedCache = $cacheFactory.get('sharedCache') ? $cacheFactory.get('sharedCache') : $cacheFactory('sharedCache');
    
       return sharedCache;
       }
    
    function bar(sharedCache, $scope)
       {
       sharedCache.put('config', $scope.config);
       }
    
    bar.$inject = ['sharedCache', '$scope'];
    sharedCache.$inject = ['$cacheFactory'];
    
    angular.module('foo',[]);
    angular.module('foo').constant('sharedCache', sharedCache);
    angular.module('foo').controller('bar', bar);
    

Ссылки

person Paul Sweatte    schedule 03.02.2016