Einmalig Angular JS templateCache löschen (für jede Implementierung)

9

Dieses Problem AngularJS deaktiviert das partielle Caching auf dem Dev-Rechner schlägt vor, es zu verwenden $templateCache.removeAll() zum Löschen der Cache-Vorlagen. Was ist jedoch, wenn Sie diese Funktion nur einmal bei jedem Bereitstellungszyklus auslösen möchten, damit Besucherbrowser die Vorlage aktualisieren / aktualisieren können? Unser Problem war, dass einige Browser die Template-HTML-Dateien nicht aktualisierten, wir würden mit neuem CSS, gemischt mit altem HTML, enden. Ich möchte nicht, dass diese Funktion die ganze Zeit auslöst, was den Anfang der Cache-Vorlagen zunichte machen würde (richtig?).

Was ist die empfohlene Frage, um $ templateCache "einmal" zu löschen, zum Beispiel einige Ideen, die ich geknackt habe:

  • Hat Angular eine interne Methode, um zu erkennen, ob sich die Vorlagendatei geändert hat? Und dann, wenn es so "update" es.
  • Verfügt Angular über eine interne "Version" oder ein "Datum", können wir eine bedingte Funktion für den Löschvorgang removeAll ()?
  • vergleichen und hinzufügen
  • Kann $ templateCache jemals selbst aktualisieren? Was waren die Absichten des angularen Erstellers, um TemplateCache auf uns zu erzwingen, wenn HTML-Dateien sich über die Zeit ändern und mehreren Browsern zur Verfügung gestellt werden.

Ich möchte nicht grunt verwenden, um Workflow-Overhead für etwas hinzuzufügen, das regelmäßig auftritt, noch die HTML-Dateivorlagen in Variablen zerlegen. ( Ist das eine gute Methode für Vorlagen-Cache-Busting in eckigen? )

Die Alternative, die ich sehen kann, ist das einfache Hinzufügen und Entfernen von removeAll () Code, das wäre albern.

    
efwjames 02.06.2015, 20:40
quelle

2 Antworten

1

Wir haben beschlossen, einfach die UNIX-Timestamp-Version an Dateien anzuhängen, die wie file.php?v=154325232 geändert wurden. Der Grund dafür war, dass wir Angular templateCache nicht wirklich benutzten, da wir die Template-Daten selbst nicht innerhalb von templateCache gespeichert hatten. Ich dachte, Angular speichert automatisch alle async geladenen Direktivtemplates in templateCache, das ist nicht wahr, du musst explizit templateCache verwenden, um eine Datei zu erhalten (Guter Tutorial zu diesem Ссылка ).

Unsere Lösung ist also nur langweilig alte Versionierung, die am besten durch Browser-Header und für nicht-Mega-Scaling-Websites verständlich ist, ganz gut.

%Vor%

Überprüfen, ob sich eine Datei geändert hat?

Schließlich lese ich templateCache, es ist nicht beabsichtigt, Daten zwischen Browsersitzungen zu speichern , sondern einen Cache-Dienst während der Sitzung. Es hat nichts mit dem Browser-Cache zu tun, sondern Angular speichert es intern. Es ist also für Websites gedacht, die dynamisch URLs navigieren und laden (dh keine echte Seitenaktualisierung, sondern einen AJAX-Trick), so wie die meisten Google-Websites heute sind.

efwjames 10.12.2015, 19:45
quelle
0

Die gängigste Methode besteht darin, eine Aufgabe mithilfe eines Knotenmoduls zu erstellen, das Winkelschablonen in eine Datei vorverarbeitet, in die Sie den js-Stapel einfügen.

Du könntest gulp-ng-html2js installieren und es zu einem Schluck machen. Dies würde eine Datei namens templates.js ausgeben, die Sie dann dem Kopf hinzufügen.
Ссылка

Dann rufe es in deiner App als Modulabhängigkeit aus. app.module('myApp',['templates']);

Führen Sie also vor jeder Bereitstellung diese Schlucktask aus. Fügen Sie bei Bedarf eine Cache-Breaker-Abfragezeichenfolge templates.js?v=123

hinzu     
efwjames 11.11.2016 21:52
quelle