0

在我陈述我的问题之前,我可能完全错误,我在我的用例中如何使用工厂。很高兴知道更好的选择。两个工厂。人们应该知道什么时候有其他变化

所以,我有两个工厂。

Factory1负责打击服务器,获取并存储该数据。

Factory2不作任何REST呼叫。但是存储一组在REST调用时很有用的数据。

简单的问题是,为什么不Factory1存储该数据而不是Factory2。 Factory2背后的动机是这些数据会被其他工厂/控制器使用。所以,为了消除冗余,这看起来更好。

现在, 当从Factory1进行REST调用时,我可以简单地执行Factory2.getData然后使用它。但是我的用例有点复杂。 我需要Factory1在Factory2.getData()发生更改时触发调用。我们通常会在控制器等情况下使用$ scope。但是如何在这里实现同样的事情呢?

基本上,Factory2的数据发生变化时,我们如何知道Factory1?

代码:

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; 
     } 
}]); 

我还是喜欢听别人的意见。

相关问题