2013-03-23 25 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

相关问题