我正在使用工厂在多个控制器之间共享数据,这是我的工厂
var szGetData = "some url that works";
myApp.factory('Data', function ($http) {
var eventData = {};
eventData.getEvent = function (event) {
return $http.get(szGetData, event);
}
return eventData;
});
在我的控制器中,我按照以下方式对工厂进行相同的调用:
Data.getEvent()
.success(function (event) {
$scope.eventData = event;
})
.error(function (error) {
$scope.status = 'Unable to load customer data: ' + error.message;
});
这一切都有效,我得到数据,但它调用我的网络服务三次,每个控制器都有自己的数据副本。我想让控制器使用相同的数据,只调用一次Web服务。谢谢你的建议。
答案 0 :(得分:5)
您可以跟踪待处理的承诺,并向所有后续呼叫者返回相同的承诺。
可选地,如果请求失败,您可以“重置”承诺,以便下次getEvent
被调用(失败后),它将再次尝试。
var szGetData = "some url that works";
myApp.factory('Data', function ($http) {
var eventData = {};
var promise;
eventData.getEvent = function (event) {
if(!promise){
promise = $http.get(szGetData, event)
.error(function(){ // this is optional
promise = false;
});
}
return promise;
}
return eventData;
});