我希望能够创建一个自定义的AngularJS服务,当其数据对象为空时发出HTTP“GET”请求,并在成功时填充数据对象。
下一次调用此服务时,我希望绕过再次发出HTTP请求的开销,而是返回缓存的数据对象。
这可能吗?
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);
});
}