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