角度服务Restangular缓存

VSO*_*VSO 9 angularjs restangular

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

    function getSomeThings(){
        return Restangular.one('things').get().then(function (thing) {
            return thing;
        });
    }
Run Code Online (Sandbox Code Playgroud)

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

我熟悉如此明确的缓存:

RestangularProvider.setDefaultHttpFields({cache: true});
Run Code Online (Sandbox Code Playgroud)

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

Sal*_*ani 23

默认情况下,Restangular不会实现任何缓存策略或方案,您需要构建自己的所有者.据我所知,cache在使用Restangular时你可以做些什么:

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

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

    function getSomeThings(){
        Restangular.one('thing', 123).withHttpConfig({ cache: true}).get().then(function (thing) {
            return thing;
        });
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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;
    
        }])
    
    Run Code Online (Sandbox Code Playgroud)