2013-03-23 15 views
5

Tôi đã tạo một dịch vụ bằng cách sử dụng CacheFactory. Tôi đã hy vọng nó sẽ là một singleton. Tôi tiêm nó vào bộ điều khiển của tôi và nó hoạt động tốt trong phạm vi của bộ điều khiển. Nhưng một khi tôi đi đến một trang khác với phạm vi khác, tôi dường như không có các giá trị trong bộ nhớ cache mà tôi đã lưu trữ trong cùng một bộ điều khiển trong một phạm vi khác. Không nên hành vi của CacheFactory là một singleton, nơi tôi có những đối tượng cùng một bộ nhớ đệm ở khắp mọi nơi tôi tiêm CacheService?CacheFactory có nằm trong angularjs một singleton không?

Đây là dịch vụ của tôi là một ví dụ:

angular.module('MyService', []).factory('CacheService', function($cacheFactory) { 
     return $cacheFactory('cacheService', { 
      capacity: 3 // optional - turns the cache into LRU cache 
     }) 
    }); 

Sau đó, trong bộ điều khiển của tôi:

function MyController($scope, CacheService) { 
    var results= CacheService.get('storedvalue'); 
    if(!results){ 
     CacheService.put('storedvalue', results); 
     alert('results not stored'); 
    } 
    else 
     alert('results stored'); 
} 

Trả lời

16

$cacheFactory là thực sự không phải là dịch vụ mà bạn muốn sử dụng - đó là một nhà máy mà bạn dùng để tạo dịch vụ singleton mà bạn muốn sử dụng. Eyeballing mã của bạn, có vẻ như nó sẽ làm việc. Nhưng tôi đã đi trước và tạo ra một bản demo để chứng minh điều đó. Dưới đây là các dịch vụ:

.factory('CacheService', function($cacheFactory) { 
    var cache = $cacheFactory('cacheService', { 
    capacity: 3 // optional - turns the cache into LRU cache 
    }); 

    return cache; 
}); 

Trong ví dụ này, CacheService singleton mà có một bộ nhớ cache cục bộ tạo ra với $cacheFactory, đó là những gì chúng tôi trở về từ các dịch vụ. Chúng ta có thể tiêm nó vào bất kỳ bộ điều khiển nào chúng ta muốn và nó sẽ luôn trả về cùng một giá trị.

Dưới đây là một Plunker làm việc: http://plnkr.co/edit/loKWGms1lMCnmiWa1QA7?p=preview


Nếu vì một số lý do bài viết của bạn không chứa những gì đã phá vỡ mã của bạn, xin vui lòng cập nhật Plunker tôi để phá vỡ nó và chúng ta có thể đi từ đó.

+0

Cảm ơn Josh. Ví dụ của bạn hoạt động. Và bây giờ tôi nhìn kỹ hơn tôi. Nơi nó không hoạt động là nếu tôi làm mới trình duyệt. Mà bây giờ tôi nghĩ về nó có thể có ý nghĩa bởi vì nó là bootstrapping angularjs một lần nữa khi tôi làm mới trình duyệt. Vì vậy, trong trường hợp đó nó có thể có ý nghĩa rằng tôi không còn có các giá trị trong bộ nhớ cache bạn sẽ đồng ý? – DavidB

+1

Có, trạng thái hoàn toàn bị ràng buộc với tải trang hiện tại. AngularJS (và tất cả các khung công tác MVC phía máy khách) được dự định sẽ được sử dụng trên các ứng dụng một trang (mặc dù chúng không bị giới hạn đối với chúng). Nhưng bạn có thể sử dụng bộ nhớ cục bộ để tồn tại nếu cần. Bạn sẽ chỉ phải tự viết dịch vụ. –

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