在我陈述我的问题之前,我可能完全错误地在我的用例中使用工厂。很高兴知道更好的选择。
所以,我有两个工厂。
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;
}
}]);
答案 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;
}
}]);
我仍然希望听到别人的意见。