两个工厂。一个人应该知道其他人何时发生变化
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;
}
}]);
我还是很想听听别人的意见。
在我陈述我的问题之前,我可能完全错误地理解我在用例中使用工厂的方式。很高兴知道更好的选择。
所以,我有两个工厂。
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;
}
}]);
我还是很想听听别人的意见。