提问者:小点点

在AngularJS中缓存HTTP“Get”服务响应?


我希望能够创建一个自定义的AngularJS服务,当其数据对象为空时发出HTTP“GET”请求,并在成功时填充数据对象。

下一次调用此服务时,我希望绕过再次发出HTTP请求的开销,而是返回缓存的数据对象。

这可能吗?


共1个答案

匿名用户

Angular的$HTTP内置了一个缓存。根据文件:

cache-{booleanObject}-使用$cacheFactory创建的布尔值或对象,用于启用或禁用HTTP响应的缓存。有关详细信息,请参阅$HTTP缓存。

因此您可以在其选项中将cache设置为true:

$http.get(url, { cache: true}).success(...);

或者,如果您更喜欢调用的配置类型:

$http({ cache: true, url: url, method: 'GET'}).success(...);

您还可以使用缓存工厂:

var cache = $cacheFactory('myCache');

$http.get(url, { cache: cache })

您可以使用$CacheFactory自己实现它(特别是在使用$Resource时):

var cache = $cacheFactory('myCache');

var data = cache.get(someKey);

if (!data) {
   $http.get(url).success(function(result) {
      data = result;
      cache.put(someKey, data);
   });
}