Javascript 如何让angularjs工厂只获取一次http数据?
我使用工厂在多个控制器之间共享数据,这是我的工厂Javascript 如何让angularjs工厂只获取一次http数据?,javascript,angularjs,Javascript,Angularjs,我使用工厂在多个控制器之间共享数据,这是我的工厂 var szGetData = "some url that works"; myApp.factory('Data', function ($http) { var eventData = {}; eventData.getEvent = function (event) { return $http.get(szGetData, event);
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服务三次,每个控制器都有自己的数据副本。我希望让控制器处理相同的数据,并且只调用web服务一次。感谢您的建议。您可以跟踪待定的承诺,并将相同的承诺返回给所有后续来电者 或者,如果请求失败,您可以“重置”承诺,以便下次调用
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;
});
您可以跟踪挂起的承诺,并将相同的承诺返回给所有后续调用方 或者,如果请求失败,您可以“重置”承诺,以便下次调用
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;
});
谢谢,这就是我要找的!谢谢,这就是我要找的!