【问题标题】:Is CacheFactory in angularjs a singleton?angularjs中的CacheFactory是单例吗?
【发布时间】:2013-03-13 01:56:03
【问题描述】:

我已经使用 CacheFactory 创建了一个服务。我期待它是一个单身人士。我将它注入我的控制器,它在控制器的范围内工作正常。但是,一旦我转到具有不同范围的不同页面,我似乎没有缓存中的值,这些值存储在不同范围的同一控制器中。 CacheFactory 的行为不应该是一个单例,在我注入 CacheService 的任何地方都有相同的缓存对象吗?

以我的服务为例:

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');
}

【问题讨论】:

    标签: angularjs angularjs-service


    【解决方案1】:

    $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 以破坏它,我们可以从那里开始。

    【讨论】:

    • 谢谢乔希。你的例子有效。现在我看起来更近了,我的也是。如果我刷新浏览器,它不起作用。现在我想到它可能是有道理的,因为当我刷新浏览器时它会再次引导 angularjs。所以在那种情况下,我不再拥有缓存中的值可能是有道理的,你同意吗?
    • 是的,状态完全绑定到当前页面加载。 AngularJS(和所有客户端 MVC 框架)旨在用于单页应用程序(尽管它们不限于它们)。但是如果需要,您可以使用本地存储来持久化。您只需要自己编写服务。
    猜你喜欢
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多