两个工厂。人们应该知道其他人何时发生变化

时间:2016-06-23 11:01:32

标签: javascript angularjs angularjs-service angularjs-factory

在我陈述我的问题之前,我可能完全错误地在我的用例中使用工厂。很高兴知道更好的选择。

所以,我有两个工厂。

Factory1负责点击服务器,获取和存储数据。

Factory2不会进行任何REST调用。但是存储一组在进行REST调用时有用的数据。

简单的问题是,为什么不将Factory1存储该数据而不是Factory2。 Factory2背后的动机是这些数据将被许多其他工厂/控制器使用。因此,要删除冗余,这似乎是一个更好的选择。

现在, 当从Factory1进行REST调用时,我可以简单地执行Factory2.getData然后使用它。但我的用例有点复杂。 每当Factory2.getData()发生变化时,我都需要Factory1来触发调用。我们会在控制器等情况下正常使用$ 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 个答案:

答案 0 :(得分: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;
        }
}]);

我仍然希望听到别人的意见。