2015-08-05 10 views
8

Esistono scenari in cui un servizio angolare memorizzerà le chiamate Restangular/$ http senza che venga esplicitamente richiesto di farlo? Per esempio io ho un servizio di fare qualcosa di simile:Cache Restangular servizio angolare

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

Questo servizio viene chiamato ogni volta che una pagina viene aggiornata (è nel percorso UI-router risolvere). C'è qualche possibilità che questa chiamata NON venga fatta ogni volta, ma verrà in qualche modo memorizzata da Angular, senza che gli venga detto esplicitamente di farlo?

mi è familiare con caching explicitly in questo modo:

RestangularProvider.setDefaultHttpFields({cache: true}); 

Questo non è nelle intenzioni. La mia domanda è se i servizi angolari hanno qualche logica di cache interna e, in tal caso, come ignorarla.

risposta

18

Per impostazione predefinita Restangular non implementa alcuna strategia o scenario di memorizzazione nella cache, è necessario crearne uno proprio. Per quanto ne so, queste sono ciò che si può fare con cache quando si lavora con Restangular:

  1. È possibile memorizzare nella cache tutto come hai detto, ma si potrebbe trovare a lavorare con dati non aggiornati, quindi state attenti con quello :

    RestangularProvider.setDefaultHttpFields({cache: true}); 
    
  2. È possibile memorizzare nella cache di risposta per le richieste di singoli come:

    function getSomeThings(){ 
        Restangular.one('thing', 123).withHttpConfig({ cache: true}).get().then(function (thing) { 
         return thing; 
        }); 
    } 
    
  3. È possibile coinvolgere un personalizzato $cacheFactory esempio per scadere o invalidare le risposte memorizzate nella cache quando necessario invocando questo: $cacheFactory.get('$http').removeAll()

  4. Si può rotolare nella propria interfaccia della cache invece di impostare vera alla cache. Questo è un esempio di fabbrica che sto usando per rimuovere tutti i dati memorizzati nella cache ogni volta che sto inviando un creare, aggiornamento o eliminare richiesta:

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

Grande risposta, Ty. – VSO