每次我想使用我的数据时,如何在不触发新API请求的情况下使用我的JSON?

时间:2015-11-28 06:56:27

标签: angularjs rest http ngresource

我想让我的应用将其请求限制在服务器而不保存数据。有没有办法在每次调用http请求时都不向服务器发出请求?可以采取哪些不同的方法以及每种方法的最佳实践/权衡?

3 个答案:

答案 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整数变量来计算已向服务器发出的请求数,以及何时达到定义的最大限制,以停止向服务器发出请求。

如果不了解为什么您想要这样做,就很难更具体。