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 做的事情:

  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 到缓存。这是我用来删除所有内容的工厂示例 缓存数据 每当我发送 createupdatedelete 请求时:

        .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;
    
        }])