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

Two Factories. One should know when there is a change in Other

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

所以,我有两个工厂。

Factory1 负责访问服务器、获取和存储数据。

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

简单的问题是,为什么 Factory1 而不是 Factory2 存储该数据。 Factory2 背后的动机是此数据将被许多其他 factories/controllers 使用。因此,要删除冗余,这看起来是一个更好的选择。

目前, 当要从 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;
            }
    }]);

因此,在 $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;
        }
}]);

我还是很想听听别人的意见。