我希望能够创建一个自定义 AngularJS 服务,该服务在其数据对象为空时发出 HTTP ‘Get’ 请求并在成功时填充数据对象。
下次调用此服务时,我想绕过再次发出 HTTP 请求的开销,而是返回缓存的数据对象。
这可能吗?
Angular 的$http有一个内置的缓存。根据文档:
缓存 ” {boolean|Object} ——一个布尔值 或 使用 $cacheFactory 创建的对象,用于启用或禁用 HTTP 响应的缓存。有关详细信息,请参阅 $http 缓存。
因此,您可以在其选项中设置cache为 true :
cache
$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); }); }