我使用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');
}
答案 0 :(得分: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以打破它,我们可以从那里开始。