我知道在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