0

Прежде чем я сформулирую свой вопрос, я могу быть совершенно неправ, как я использую фабрики в моем случае использования. Приятно знать лучшие альтернативы.Два завода. Нужно знать, когда есть изменения в других

Итак, у меня есть два заводов.

Factory1 заботится о попадании на сервер, получении и хранении этих данных.

Factory2 не делает никаких звонков REST. Но хранит набор данных, которые будут полезны при вызове REST.

Простой вопрос будет, почему бы не Factory1 хранить эти данные вместо Factory2. Мотив Factory2 заключается в том, что эти данные будут использоваться множеством других фабрик/контроллеров. Таким образом, для удаления избыточности это выглядит лучше.

На данный момент Когда вызов REST должен быть сделан с Factory1, я могу просто сделать Factory2.getData, а затем использовать его. Но мой прецедент немного сложнее. Мне нужно, чтобы Factory1 срабатывал при каждом вызове Factory2.getData(). Мы будем использовать $ scope обычно в случае контроллеров и т. Д. Но как добиться того же самого здесь?

В принципе, как это сделать, мы знаем в Factory1, когда есть изменения в данных Factory2?

Код:

servicesModule.factory('Factory2', function() { 

var fObj = {}, 
    filters; 

fObj.setFilters = function(fs) { 
    filters = fs; 
}; 

fObj.getFilters = function() { 
    return filters; 
}; 

return fObj; 
}); 

servicesModule.factory('Factory1', ['$http', '$q', 'Factory2', function($http, $q, Factory2) { 
      var fObj = {}, 
      data; 
      fObj.fetchData = function(params) { 
       var filters = Factory2.getFilters(); 
       // REST call here and set data to result 
      } 
      fObj.getData = function(){ 
        return data; 
      } 
    }]); 
+1

использование '$ rootScope. $ Broadcast' –

ответ

0

Итак, немного рытье указал в направлении $ rootScope.

servicesModule.factory('Factory2', ['$rootScope', function($rootScope) { 

    var fObj = {}, 
     filters; 

    fObj.setFilters = function(fs) { 
     filters = fs; 
     $rootScope.$emit("FiltersUpdated", fs); 
    }; 

    fObj.getFilters = function() { 
     return filters; 
    }; 

    return fObj; 
}]); 

servicesModule.factory('Factory1', ['$http', '$q', 'Factory2', '$rootScope', function($http, $q, Factory2, $rootScope) { 
     var fObj = {}, 
     data; 

     $rootScope.$on('FiltersUpdated', function(event, data) { 
      fObj.fetchData(); 
     }) 

     fObj.fetchData = function(params) { 
      var filters = Factory2.getFilters(); 
      // REST call here and set data to result 
     } 
     fObj.getData = function(){ 
       return data; 
     } 
}]); 

Мне все еще хотелось бы услышать мнения других.

Смежные вопросы