2016-04-16 4 views
2

Ich verwende Angulars Standard $http Cache in einem meiner Dienste. Wenn der Benutzer von einer Ansicht zu einer anderen navigiert (ich verwende ui-router), wird der Cache ungültig und alle Elemente werden daraus entfernt. Ich möchte den Cache während der gesamten Lebensdauer meiner Anwendung nicht ungültig machen.

EDIT: Zum Beispiel diese Fabrik nicht wieder zwischengespeichert Ergebnis nach auf eine andere Route navigieren und es ruft den Server api das Ergebnis zu erhalten:

cardModule.factory("myFactory", function ($http) { 
    return { 
     getAll: function() { 
      return $http.get("all", { cache: true }) 
     } 
    } 
}); 

Wie aus Entfernen von Elementen Standard-Cache verhindern von selbst nach einer Routenänderung?

+0

Können Sie ein JSBin- oder Plunkr-Codebeispiel bereitstellen? –

+0

Verwirrt. Der Cache in einem Dienst bleibt bestehen. Wenn Sie den Dienst erneut aufrufen, wird der Cache anstelle eines neuen Anrufs bereitgestellt. – Jorg

Antwort

2

Ich habe die Ursache des Problems gefunden. Es war meine eigene Schuld. Ich hatte irgendwo einen Code, der nach dem Zustandswechsel den Cache löscht. Es gibt kein Problem mit dem standardmäßigen eckigen $ http-Cache.

0

Das sollte nicht mit ui-router oder $http verwandt sein. Hier sind ein paar Dinge, die Sie bestätigen müssen:

  1. Ist Ihr Server (die Ihre Ressourcen dient) ist die Einstellung der Cache-Header oder nicht
  2. Achten Sie darauf, nicht Ctrl + F5 werden mit der Seite
  3. auffrischen wenn Sie Chrome-Browser verwenden, stellen Sie sicher, dass eine Einstellung Disable cache nicht markiert ist
+0

Ich aktualisiere die Seite nicht, ich navigiere nur zu einer anderen Ansicht. Das Problem bezieht sich nicht auf den HTTP-Protokollcache. Es ist das Problem des eckigen $ http Cache. – alisabzevari

+0

Oh! lass mich überprüfen –

1

würde ich dies als einen Kommentar hinterlassen, aber ich habe nicht genug Punkte noch ..

Könnten Sie eine Form der Memoisierung versuchen? Mit anderen Worten, haben Sie ein Modell für den Bereich, dann, wenn das Modell nicht definiert ist, triggern Sie den $ http Aufruf? Etwas wie:

Auf diese Weise wird das Modell initialisiert und nur einmal aufgerufen. Ein möglicher Nachteil wäre, dass die if-Anweisung dies ineffizient machen könnte.

Ich habe das nicht getestet, nur die Idee da draußen werfen. Ich bin auch sehr an diesem Problem interessiert.

+0

Ja, ich kann. Aber eckig hat einen netten Caching-Mechanismus aus der Box und ich möchte seine Best Practices nutzen. Auch ich kann meinen eigenen cacheProvider schreiben, aber ich denke, Standard-Caching-Funktion von eckigen kann das Problem lösen. – alisabzevari

+0

Super! Du bist weit fortgeschrittener als ich ^^ Ich werde mehr Forschung betreiben und diese Frage im Auge behalten. – Onyooo

+0

Das [NG-Buch] (https://www.ng-book.com/p/Caching/#default-http-cache) schlägt vor, den Standard-$ -Cache mit etwas wie: 'var cache = $ cacheFactory.get ("$ http"); var usersCache = cache.get ('http://beispiel.com/api/users.json'); '. Das kann kürzer sein als das Schreiben eines benutzerdefinierten. – Onyooo

Verwandte Themen