1

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

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

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

控制台上的输出很奇怪。它们是 $cacheFactory 中函数的名称(删除、销毁、信息等)

4

2 回答 2

3

没有列出实例中所有键的内置方法,$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()在从缓存中删除条目时更新密钥的方法。

于 2016-08-19T08:05:51.573 回答
0

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

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

于 2015-06-03T11:52:40.460 回答