Angular 服务 Restangular 缓存
Angular Service Restangular Caching
是否存在 angular 服务会缓存 Restangular/$http 调用而不被明确告知这样做的情况?例如我有一个服务做这样的事情:
function getSomeThings(){
return Restangular.one('things').get().then(function (thing) {
return thing;
});
}
每次刷新页面时都会调用此服务(它在 UI-router 路由解析中)。是否有可能不会每次都进行此调用,但会以某种方式被 Angular 缓存,而无需明确告知这样做?
我很熟悉 caching explicitly 像这样:
RestangularProvider.setDefaultHttpFields({cache: true});
这不是本意。我的问题是 angular 服务是否有一些固有的缓存逻辑,如果有,如何覆盖它。
默认情况下 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
到缓存。这是我用来删除所有内容的工厂示例
缓存数据
每当我发送 create、update 或 delete 请求时:
.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;
}])
是否存在 angular 服务会缓存 Restangular/$http 调用而不被明确告知这样做的情况?例如我有一个服务做这样的事情:
function getSomeThings(){
return Restangular.one('things').get().then(function (thing) {
return thing;
});
}
每次刷新页面时都会调用此服务(它在 UI-router 路由解析中)。是否有可能不会每次都进行此调用,但会以某种方式被 Angular 缓存,而无需明确告知这样做?
我很熟悉 caching explicitly 像这样:
RestangularProvider.setDefaultHttpFields({cache: true});
这不是本意。我的问题是 angular 服务是否有一些固有的缓存逻辑,如果有,如何覆盖它。
默认情况下 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 到缓存。这是我用来删除所有内容的工厂示例 缓存数据 每当我发送 create、update 或 delete 请求时:
.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; }])