2016-01-29 2 views
0

In this plunk У меня есть фабрика, которая обертывает Angular's $cacheFactory. Контроллер использует фабрику для создания двух независимых кешей, однако я получаю следующую ошибку: cacheManager is not a function. Что случилось с этим кодом?создать несколько объектов кеша с использованием фабрики

HTML

<body ng-app="app" ng-controller="myCtl"> 
    cache1 : {{cache1 | json}} 
    <br/> 
    cache2 : {{cache2 | json}} 
</body> 

Javascript:

var app = angular.module('app',[]);  
app.controller('myCtl', function ($scope,cacheManager) { 

    var cache1 = new cacheManager(); 
    var cache2 = new cacheManager(); 

    cache1.create("cache1"); 
    cache2.create("cache2"); 

    cache1.add("key1", "value1"); 
    cache2.add("key2", "value2"); 
}) 

.factory('cacheManager',function($cacheFactory){ 

    var factory = {}; 
    var cache = null; 

    factory.create = function(cacheId){ 
     cache = $cacheFactory(cacheId); 
     return cache; 
    }; 

    factory.add = function(key,value){ 
     if (!cache) 
      return; 
     cache.put(key, value); 
    } 

    factory.get = function(key){ 
     if (!cache) 
      return; 
     return cache.get(key); 
    } 

    return factory; 

}); 
+0

Я думаю, что это то, что вы ищете: http://stackoverflow.com/questions/20800909/angularjs-return-new-factory-instance –

ответ

0

Это код, который сделал трюк, фабрика должна возвращать функцию, чтобы позволить контроллеру делать новый. Кроме того, методы должны быть определены с prototype ключевого слова:

var app = angular.module('app',[]); 

app.controller('myCtl', function ($scope,cacheManager) { 

    var cache1 = new cacheManager(); 
    var cache2 = new cacheManager(); 

    cache1.create("cache1"); 
    cache2.create("cache2"); 

    cache1.add("key1", "value1"); 
    cache2.add("key2", "value2"); 

    alert(cache1.get("key1")); 


}) 

.factory('cacheManager',function($cacheFactory){ 

    var factory = function() { }; 

    factory.cache = null; 

    factory.prototype.create = function(cacheId){ 
     cache = $cacheFactory(cacheId); 
     return cache; 
    }; 

    factory.prototype.add = function(key,value){ 
     if (!cache) 
      return; 
     cache.put(key, value); 
    } 

    factory.prototype.get = function(key){ 
     if (!cache) 
      return; 
     return cache.get(key); 
    } 

    return factory; 

}); 
0

cacheManager является объектом и не является функцией()

 cacheManager.create("cache1"); 
     cacheManager.create("cache2"); 

     cacheManager.add("key1", "value1"); 
     cacheManager.add("key2", "value2"); 
0

Я думаю, вы не должны создавать несколько экземпляров cacheManager вместо вас должен создать несколько объектов кэша и добавить несколько ключей/значений в разные объекты кеша.

var cache1 = cacheManager.create("cache1"); 
    var cache2 = cacheManager.create("cache2"); 

cache1.add ("key1", "value1"); cache2.add («ключ2», «значение2»);

+0

Приносим извинения за неправильное форматирование информации –

+0

Вы можете добавить несколько ключей/значение в кеше1, а также cache2. like cache1.add ('key11', '11'); cache1.add ('key22', '22'); cache1.add ('key33', '33'); –