2013-03-23 23 views
5

我創建用CacheFactory的服務。我期待它是一個單身人士。我將它注入到控制器中,並且在控制器的範圍內正常工作。但是,一旦我去到不同的頁面,不同的範圍,我似乎沒有在我存儲在同一個控制器在不同的範圍內緩存的值。 CacheFactory的行爲不應該是一個單例,在我注入CacheService的任何地方都有相同的緩存對象?在angularjs中的CacheFactory是單例嗎?

這是我作爲一個例子服務:

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

然後在我的控制器:

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

回答

16

$cacheFactory實際上是不是你想要使用的服務 - 這是一個工廠,您使用創建您想要使用的單例服務。目光看你的代碼,它似乎應該工作。但我繼續並創建了一個演示來證明它的確如此。這裏的服務:

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

    return cache; 
}); 

在這個例子中,CacheService具有與$cacheFactory創建一個本地緩存,這是我們從服務返回的單元素。我們可以將它注入到我們想要的任何控制器中,並且它會始終返回相同的值。

這裏有一個工作Plunker:http://plnkr.co/edit/loKWGms1lMCnmiWa1QA7?p=preview


如果出於某種原因您的文章不包含什麼打破了你的代碼,請隨時更新我Plunker打破它,我們可以從那裏。

+0

感謝約什。你的例子工作。現在我看得更近了,我的也是。如果我刷新瀏覽器,它不起作用。現在我認爲這很有意義,因爲它在我刷新瀏覽器時再次引導angularjs。那麼在這種情況下,我認爲我不再有緩存中的值會同意嗎? – DavidB 2013-03-23 18:55:57

+1

是的,狀態完全綁定到當前的頁面加載。 AngularJS(和所有客戶端的MVC框架),旨在在單頁的應用程序使用(儘管他們並不限於它們)。但是,如果需要,您可以使用本地存儲來堅持。你只需要自己編寫服務。 – 2013-03-23 19:10:13

相關問題