一尘不染

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

angularjs

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

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

这可能吗?


阅读 271

收藏
2020-07-04

共1个答案

一尘不染

Angular的$ http内置了一个缓存。根据文档:

cache – {boolean | Object} – 用$ cacheFactory创建的布尔值 或对象
,用于启用或禁用HTTP响应的缓存。有关更多信息,请参见
$ http缓存

布尔值

因此,您可以在其选项中将其设置cachetrue

$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);
   });
}
2020-07-04