Ich habe eine einfache User $ -Ressource, die die Standardimplementierung des $ http-Cache wie folgt verwendet:
factory('User', function($resource){
return $resource(endpoint + '/user/current/:projectId', {},
{get:
{
cache: true,
method: 'GET'
}
}
);
})
Dies funktioniert sehr gut, dh mein Server wird in meiner Anwendung nur einmal aufgerufen, dann wird der Wert aus dem Cache abgerufen.
Aber ich muss den Wert vom Server nach einer bestimmten Operation aktualisieren. Gibt es eine einfache Möglichkeit, das zu tun?
Vielen Dank.
angularjs
angularjs-resource
Alexandre Bulté
quelle
quelle
cache
-{boolean|Cache}
- Wenn true, wird ein Standard-$ http-Cache zum Zwischenspeichern der GET-Anforderung verwendet, andernfalls, wenn eine Cache-Instanz mitAntworten:
Behalten Sie den Booleschen Wert und holen Sie sich den
$http
Cache:Dann können Sie es wie jeden anderen Cache steuern, der mit
$cacheFactory
einer unten angegebenen Verwendungsinstanz erstellt wurde:quelle
$resource
Werk auf die URL zuzugreifen ?Anstatt ein boolesches Argument in der
cache
Eigenschaft eines jeden zu verwendenaction
, können Sie eine mit $ cacheFactory erstellte Cache-Instanz weitergeben, über die Sie mehr Kontrolle haben können (dh den Cache löschen).Anwendungsbeispiel:
quelle
Ich bin auf diesen Thread gestoßen, der nach etwas Ähnlichem gesucht hat, habe jedoch festgestellt, dass $ resource den Cache automatisch für Sie verwaltet, sodass das Löschen des Caches nicht erzwungen werden muss.
Die Idee ist, dass wenn Sie eine Ressource haben, die Sie abfragen können, diese Abfrageantwort zwischengespeichert wird. Wenn Sie jedoch etwas für dieselbe Ressource speichern, müssen die zuvor zwischengespeicherten Daten ungültig sein, damit sie für Sie gelöscht werden. Es macht Sinn, dass es so funktionieren würde.
Hier ist ein Code, den ich dazu verwende (Sie können den möglicherweise seltsam aussehenden Teil der Werkserstellung ignorieren und auf den "Klassen" -Körper achten).
Wenn Sie die Funktion listPlayers mehrmals aufrufen, wird beim ersten Aufruf eine http-Get-Anforderung gesendet, und alle nachfolgenden Aufrufe werden zwischengespeichert. Wenn Sie jedoch addPlayer aufrufen, wird ein http-Beitrag wie erwartet ausgeführt, und beim nächsten Aufruf von listPlayers wird ein http-Get ausgeführt (nicht zwischengespeichert).
Dies hält Sie davon ab, den Cache einer anderen Person ($ http) zu verwalten und zu versuchen, mit den URLs Schritt zu halten, die für Anforderungen verwendet werden und die Caches zum richtigen Zeitpunkt löschen.
Ich nehme an, die Moral der Geschichte hier ist, mit der Bibliothek zu arbeiten, und alles wird gut ... bis auf Fehler oder unvollständige Funktionen, aber Angular hat keine davon;)
ps Dies alles läuft unter AngularJS 1.2.0.
quelle