是否存在角度服务缓存Restangular / $ http调用而未明确告知这样做的情况?例如,我有一个服务做这样的事情:
function getSomeThings(){
return Restangular.one('things').get().then(function (thing) {
return thing;
});
}
每次页面刷新时都会调用此服务(它在UI路由器路由解析中)。是否有可能每次都会调用这个调用,但Angular会以某种方式缓存它,而没有明确告知这样做?
我很熟悉caching explicitly:
RestangularProvider.setDefaultHttpFields({cache: true});
这不是意图。我的问题是角度服务是否具有一些固有的缓存逻辑,如果是,则如何覆盖它。
答案 0 :(得分:23)
默认情况下 Restangular 不会实现任何缓存策略或方案,您需要构建自己的所有者。据我所知,使用 Restangular 时,cache
可以执行以下操作:
你可以像你说的那样缓存所有内容,但你可能会发现自己正在使用陈旧的数据,所以要小心:
RestangularProvider.setDefaultHttpFields({cache: true});
您可以缓存单个请求的响应,例如:
function getSomeThings(){
Restangular.one('thing', 123).withHttpConfig({ cache: true}).get().then(function (thing) {
return thing;
});
}
您可以参与自定义
$cacheFactory
实例,在必要时通过调用此方法使缓存的响应失效或无效:$cacheFactory.get('$http').removeAll()
您可以在自己的缓存界面中滚动而不是设置为true 到缓存。这是我用来删除所有的工厂示例 缓存数据 无论何时我发送创建,更新或删除请求:
.factory('HTTPCache', ['Restangular', '$cacheFactory',
function(Restangular, $cacheFactory) {
var service = {};
var cache;
// Creates the cache
service.init = function() {
cache = $cacheFactory('http');
Restangular.setDefaultHttpFields({cache: cache});
Restangular.setResponseInterceptor(function(response, operation) {
if (operation === 'put' || operation === 'post' || operation === 'remove') {
cache.removeAll();
}
return response;
})
}
return service;
}])