2015-03-09 4 views
5

Wenn ich das $ cacheFactory-Objekt auflisten hat es mehrere Methoden, aber ich sehe nicht den tatsächlichen Schlüssel/Wert-Cache.Get keys von Angular cacheFactory

Angenommen, Sie betrachten den $ http-Cache, $ cacheFactory ($ http), wie erhalten Sie eine Liste von Schlüsseln oder idealerweise Schlüssel und Werte, die derzeit zwischengespeichert werden?

+0

Interessante Frage, ich habe mich gefragt, das gleiche! – teone

Antwort

2

Verwenden Dekorateur des $cacheFactory eine getKeys Methode hinzuzufügen:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 

 
<body ng-app="decorateExample"> 
 

 
    <script> 
 
    function cacheProvider($provide) 
 
    { 
 
    // monkey-patches $templateCache to have a keys() method 
 
    $provide.decorator('$templateCache', ['$delegate', cacheDelegator]); 
 
    } 
 
              
 
    function cacheDelegator($delegate) 
 
    { 
 
    var keys = [], origPut = $delegate.put; 
 

 
    $delegate.put = function(key, value) 
 
     { 
 
     origPut(key, value); 
 
     keys.push(key); 
 
     }; 
 

 
    // we would need cache.peek() to get all keys from $templateCache, but this features was never 
 
    // integrated into Angular: https://github.com/angular/angular.js/pull/3760 
 
    // please note: this is not feature complete, removing templates is NOT considered 
 
    $delegate.getKeys = function() 
 
     { 
 
     return keys; 
 
     }; 
 

 
    return $delegate; 
 
    } 
 
    
 
angular.module('decorateExample', []); 
 
    
 
angular.module('decorateExample').config(['$provide', cacheProvider]); 
 
</script> 
 

 
</body>

Referenzen

+0

Dies ist ein sehr guter Vorschlag, aber leider funktioniert es nur mit '$ templateCache' und kann nicht für andere Caches wie' $ http' angewendet werden. Wenn Sie das Cache-Objekt ändern möchten, das der Dienst "$ http" verwendet, sollten Sie einen erstellen und ihn manuell mit den erforderlichen Methoden patchen. – n1313