有没有办法在角度$ cacheFactory中获取所有键?

时间:2015-06-03 11:44:40

标签: javascript angularjs cachefactory

我知道在npm / bower上有另一个名为angular-cache的库。但是添加一个新库是我工作的一个过程。所以我想使用$ cacheFactory或核心Javascript函数来解决这个问题。

我在stackoverflow中看到很多响应来获取hasmap的所有键,所以我尝试了这个:

(?:X|H)TML Parser

控制台上的输出很奇怪。它们是$ cacheFactory中的函数名称(remove,destroy,info等。)

2 个答案:

答案 0 :(得分:2)

没有内置的方法列出$cacheFactory实例中的所有密钥,而且no plans to include this to the core library,所以您必须使用angular-cache库等替换或添加这些方法由你自己。我需要将这个功能添加到我的$ http缓存中,我找不到干净利落的方法(使用装饰器或其他东西)所以我不得不在我的.run()块中使用猴子修补它:

// create a new $cacheFactory instance 
var httpWithKeysCacheFactory = $cacheFactory('$httpWithKeys'),
// save the original put() method
    originalPut = httpWithKeysCacheFactory.put;
// add a property to hold cache keys
httpWithKeysCacheFactory.keys = [];
// overwrite put() with a custom method
httpWithKeysCacheFactory.put = function (key, value) {
// call original put() and save the key
    if (originalPut(key, value)) {
        this.keys.push(key);
    }
};
// tell $http to use your monkey-patched cache factory
$http.defaults.cache = httpWithKeysCacheFactory;

这样做让我可以从控制器访问我的缓存键,如下所示:

$cacheFactory.get('$httpWithKeys').keys;

注意:这是一种非常天真的方法,它不会检查密钥重复项,也不会修改remove()removeAll()方法,以便在从缓存中删除条目时更新密钥。

答案 1 :(得分:0)

您可以使用此模块:angular-cache

所以你可以使用这个CacheFactory.keys()来返回你注册的缓存的所有id