有没有办法在angular $cacheFactory中获取所有的键?



我知道在npm/wer上还有一个叫做angular-cache的库。但在我工作的地方,添加一个新库是一个相当长的过程。所以我想使用$cacheFactory或核心Javascript函数来解决这个问题。

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

var keys = [];
for(var key in parameterCache) {
    keys.push(key);
    console.log(key);
}

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

没有内置的方法来列出$cacheFactory实例中的所有键,也没有计划将其包含到核心库中,因此您必须使用诸如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()方法来更新键,当一个条目从缓存中删除。

你可以使用这个模块:angular-cache

所以你可以使用cachefactory。keys()返回所有注册缓存的id

最新更新