我想让我的应用将其请求限制在服务器而不保存数据。有没有办法在每次调用http请求时都不向服务器发出请求?可以采取哪些不同的方法以及每种方法的最佳实践/权衡?
答案 0 :(得分:2)
这取决于你的需要。一种方法是将结果存储在工厂的请求中并检索它们。
app.factory('DataService', function($http) {
var values;
var requestValues = function() {
$http.get("/api/getValues").then(
function(results){
values = results;
});
};
var getValues = function() {
return values;
};
return {
requestValues : requestValues, // this will make a http request and store the result
getValues: getValues // this will call the stored result (without making a http request)
}
});
然后在你的控制器中调用函数来请求值,然后获取值。有两个函数requestValues()
来发出http请求并保存结果,getValues()
来获取存储的值而不发出http请求。调用requestValues()
后,您应该可以从任意位置调用getValues()
来获取值,而无需发出新的http请求。
myApp.controller('MyController', function ($scope, DataService) {
var init = function (){
DataService.requestValues(); // this will make the http request and store the result
$scope.items = DataService.getValues(); // this will get the result
};
var justGetValues = function(){
$scope.items = DataService.getValues(); // this will get the result (without making a http request)
};
});
现在,您只需在需要值时调用DataService.getUpdates();
即可。 (你可能希望将它们包装在promise
中。由于简单,我没有这样做)
或者,您可以使用@JLRishe提到的缓存选项。 Angular的$ http内置了一个缓存,因此只需在其选项中将缓存设置为true
$http.get(url, { cache: true})
.success(){
// on success
}.error(){
// on error
};
答案 1 :(得分:0)
您可以使用cache
参数中的config
选项来使用各种$http
方法:
$http.get('/someUrl', {
cache: true
});
答案 2 :(得分:0)
最明显的方法是使用一个JavaScript整数变量来计算已向服务器发出的请求数,以及何时达到定义的最大限制,以停止向服务器发出请求。
如果不了解为什么您想要这样做,就很难更具体。