我希望能够创建一个自定义AngularJS服务,该服务在其数据对象为空时发出HTTP“获取”请求,并在成功时填充该数据对象。
下次调用此服务时,我想绕过再次发出HTTP请求的开销,而是返回缓存的数据对象。
这可能吗?
Angular的$ http内置了一个缓存。根据文档:
cache – {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); }); }