2015-08-05 41 views
8

Có các tình huống trong đó dịch vụ góc sẽ lưu lại các cuộc gọi Restangular/$ http mà không được thông báo rõ ràng để làm như vậy không? Ví dụ: Tôi có một dịch vụ làm một việc như sau:Dịch vụ góc lồng tiếng Caching

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

Dịch vụ này được gọi mỗi lần làm mới trang (nó đang trong giải quyết tuyến đường bộ định tuyến UI). Có bất kỳ cơ hội nào mà cuộc gọi này KHÔNG được thực hiện mọi lúc, nhưng sẽ được lưu trữ bởi Angular bằng cách nào đó, mà không được thông báo rõ ràng để làm như vậy?

Tôi quen thuộc với caching explicitly như vậy:

RestangularProvider.setDefaultHttpFields({cache: true}); 

Điều này là không mục đích. Câu hỏi của tôi là liệu các dịch vụ góc có một số logic bộ nhớ đệm bẩm sinh, và nếu có, làm thế nào để ghi đè nó.

Trả lời

18

Theo mặc định Restangular không thực hiện bất kỳ chiến lược hoặc kịch bản bộ nhớ đệm nào, bạn sẽ cần phải xây dựng công ty của mình. Theo như tôi biết, đó là những gì bạn có thể làm với cache khi làm việc với Restangular:

  1. Bạn có thể cache tất cả mọi thứ như bạn nói nhưng bạn có thể thấy mình làm việc với dữ liệu cũ, vì vậy hãy cẩn thận với điều đó :

    RestangularProvider.setDefaultHttpFields({cache: true}); 
    
  2. Bạn có thể cache đáp ứng cho các yêu cầu duy nhất như:

    function getSomeThings(){ 
        Restangular.one('thing', 123).withHttpConfig({ cache: true}).get().then(function (thing) { 
         return thing; 
        }); 
    } 
    
  3. Bạn có thể liên quan đến một tùy chỉnh $cacheFactory dụ hết hạn hoặc làm mất hiệu lực đáp ứng được lưu trữ khi cần thiết bằng cách gọi này: $cacheFactory.get('$http').removeAll()

  4. Bạn có thể cuộn trong giao diện bộ nhớ cache của riêng bạn thay vì thiết lập đúng vào bộ nhớ cache. Đây là một ví dụ nhà máy mà tôi đang sử dụng để loại bỏ tất cả các dữ liệu lưu trữ bất cứ khi nào tôi gửi một tạo, cập nhật hoặc xóa yêu cầu:

    .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

Great câu trả lời, ty. – VSO

Các vấn đề liên quan