角度服务Restangular缓存

时间:2015-08-05 03:42:01

标签: angularjs restangular

是否存在角度服务缓存Restangular / $ http调用而未明确告知这样做的情况?例如,我有一个服务做这样的事情:

    function getSomeThings(){
        return Restangular.one('things').get().then(function (thing) {
            return thing;
        });
    }

每次页面刷新时都会调用此服务(它在UI路由器路由解析中)。是否有可能每次都会调用这个调用,但Angular会以某种方式缓存它,而没有明确告知这样做?

我很熟悉caching explicitly

RestangularProvider.setDefaultHttpFields({cache: true});

这不是意图。我的问题是角度服务是否具有一些固有的缓存逻辑,如果是,则如何覆盖它。

1 个答案:

答案 0 :(得分:23)

默认情况下 Restangular 不会实现任何缓存策略或方案,您需要构建自己的所有者。据我所知,使用 Restangular 时,cache可以执行以下操作:

  1. 你可以像你说的那样缓存所有内容,但你可能会发现自己正在使用陈旧的数据,所以要小心:

    RestangularProvider.setDefaultHttpFields({cache: true});
    
  2. 您可以缓存单个请求的响应,例如:

    function getSomeThings(){
        Restangular.one('thing', 123).withHttpConfig({ cache: true}).get().then(function (thing) {
            return thing;
        });
    }
    
  3. 您可以参与自定义 $cacheFactory 实例,在必要时通过调用此方法使缓存的响应失效或无效:$cacheFactory.get('$http').removeAll()

  4. 您可以在自己的缓存界面中滚动而不是设置为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;
    
        }])