Ich habe Probleme beim Zwischenspeichern von Partials in AngularJS.
In meiner HTML-Seite habe ich:
<body>
<div ng-view></div>
<body>
wo meine partials geladen sind.
Wenn ich den HTML-Code in meinem Teil ändere, lädt der Browser immer noch alte Daten.
Gibt es eine Problemumgehung?
caching
angularjs
browser-cache
Mennion
quelle
quelle
app.config.update(SEND_FILE_MAX_AGE_DEFAULT=0)
, indem ich es zu meinem hinzugefügt habeflask_app.py
. (Ich stelle mir ähnliche Dinge für andere Webserver vor).Ctrl+Shift+R
(dh Hard Reload) durch, und unabhängig davon, welcher Caching-Mechanismus verwendet wird, ignoriert Chrome es undng-include
|ng-view
|templateUrl
werden von dieser Abkürzung nicht behandeltAntworten:
Für die Entwicklung können Sie auch den Browser-Cache deaktivieren. Klicken Sie in den Chrome Dev Tools unten rechts auf das Zahnrad und aktivieren Sie die Option
Update: In Firefox gibt es die gleiche Option in Debugger -> Einstellungen -> Erweiterter Abschnitt (auf Version 33 überprüft)
Update 2: Obwohl diese Option in einigen Berichten in Firefox angezeigt wird, funktioniert sie nicht. Ich schlage vor, Firebug zu verwenden und die Antwort von Hadaytullah zu befolgen.
quelle
Aufbauend auf der Antwort von @ Valentyn gibt es eine Möglichkeit, den Cache immer automatisch zu leeren, wenn sich der Inhalt der ng-Ansicht ändert:
quelle
Wie in den anderen Antworten erwähnt, kann der Cache hier und hier folgendermaßen geleert werden:
Wie von gatoatigrado im Kommentar vorgeschlagen , scheint dies jedoch nur zu funktionieren, wenn die HTML-Vorlage ohne Cache-Header bereitgestellt wurde.
Das funktioniert also bei mir:
Im Winkel:
Sie können Cache-Header auf verschiedene Arten hinzufügen, aber hier sind einige Lösungen, die für mich funktionieren.
Wenn Sie verwenden
IIS
, fügen Sie dies Ihrer web.config hinzu:Wenn Sie Nginx verwenden, können Sie dies zu Ihrer Konfiguration hinzufügen:
Bearbeiten
Ich habe gerade festgestellt, dass die Frage
dev
Maschine erwähnt , aber hoffentlich kann dies noch jemandem helfen ...quelle
Wenn Sie über einen Cache sprechen, der zum Zwischenspeichern von Vorlagen verwendet wird, ohne die gesamte Seite neu zu laden, können Sie ihn wie folgt leeren:
Und im Markup:
<button ng-click='clearCache()'>Clear cache</button>
Drücken Sie diese Taste, um den Cache zu löschen.
quelle
Lösung für Firefox (33.1.1) mit Firebug (22.0.6)
quelle
Dieses Snippet hat mir geholfen, das Zwischenspeichern von Vorlagen loszuwerden
Die Details des folgenden Snippets finden Sie unter diesem Link: http://oncodesign.io/2014/02/19/safely-prevent-template-caching-in-angularjs/
quelle
if (!current) { return; }
Ich poste dies nur, um alle Möglichkeiten abzudecken, da keine der anderen Lösungen für mich funktioniert hat (sie haben unter anderem Fehler aufgrund von Abhängigkeiten von Winkel-Bootstrap-Vorlagen verursacht).
Während Sie eine bestimmte Vorlage entwickeln / debuggen, können Sie sicherstellen, dass sie immer aktualisiert wird, indem Sie einen Zeitstempel in den Pfad einfügen, wie folgt:
Beachten Sie das Finale
?nd=' + Date.now()
in dertemplateUrl
Variablen.quelle
.value('DEBUG', true)
, um diese Leitung zu aktivieren oder nicht..run(function($rootScope) { $rootScope.DEBUG = true; ...
und dann innerhalb der Direktive das $ rootScope wie.directive('filter', ['$rootScope', function($rootScope)...
und in die zurückgegebene Objekteigenschaft zu injizieren :templateUrl: '/app/components/filter/filter-template.html' + ($rootScope.DEBUG ? '?n=' + Date.now() : '')
. Vielleicht könnten Sie Ihren .value-Ansatz ('DEBUG', wahr) ausarbeiten? Upvoted!.value('DEBUG', true
ist die gleiche wie bei$rootScope
, jedoch ohne Unordnung :) Sie können späterDEBUG
in den Controller einspeisen und als normaler Dienst abfragen..value(...)
Ding einzuschließen, wenn es nicht zu raffiniert ist? Ich nehme an, das Konzept dahinter ist eine kantige Best Practice, die mir unbekannt ist.Wie andere bereits gesagt haben, kann das vollständige Caching für Entwicklungszwecke problemlos durchgeführt werden, ohne dass der Code geändert werden muss: Verwenden Sie eine Browsereinstellung oder ein Plugin. Außerhalb von dev entfernen Sie die Vorlagen-URL während $ routeChangeStart (oder $ stateChangeStart für UI-Router) aus dem Cache, um das Angular-Vorlagen-Caching von routenbasierten Vorlagen zu verhindern, wie Shayan gezeigt hat. Dies wirkt sich jedoch NICHT auf das Caching von Vorlagen aus, die von ng-include geladen wurden, da diese Vorlagen nicht über den Router geladen werden.
Ich wollte in der Lage sein, jede Vorlage, einschließlich der von ng-include geladenen, in der Produktion zu fixieren und Benutzer den Hotfix schnell in ihrem Browser erhalten zu lassen, ohne die gesamte Seite neu laden zu müssen. Ich bin auch nicht besorgt darüber, das HTTP-Caching für Vorlagen zu verhindern. Die Lösung besteht darin, jede von der App gestellte HTTP-Anforderung abzufangen, diejenigen zu ignorieren, die nicht für die HTML-Vorlagen meiner App bestimmt sind, und dann der URL der Vorlage einen Parameter hinzuzufügen, der sich jede Minute ändert. Beachten Sie, dass die Pfadprüfung spezifisch für den Pfad der Vorlagen Ihrer App ist. Um ein anderes Intervall zu erhalten, ändern Sie die Mathematik für den Parameter oder entfernen Sie% vollständig, um kein Caching zu erhalten.
quelle
Wenn Sie einen UI-Router verwenden, können Sie einen Decorator verwenden und den Dienst $ templateFactory aktualisieren und einen Abfragezeichenfolgenparameter an templateUrl anhängen. Der Browser lädt die neue Vorlage immer vom Server.
Ich bin sicher, dass Sie das gleiche Ergebnis erzielen können, indem Sie die "when" -Methode in $ routeProvider dekorieren.
quelle
Ich fand, dass die HTTP-Interceptor-Methode ziemlich gut funktioniert und zusätzliche Flexibilität und Kontrolle ermöglicht. Darüber hinaus können Sie für jede Produktionsversion einen Cache-Bust durchführen, indem Sie einen Release-Hash als Buster-Variable verwenden.
So sieht die Dev-Cachebusting-Methode aus
Date
.quelle
Hier ist eine weitere Option in Chrome.
Klicken Sie F12, um Entwicklertools zu öffnen. Dann Ressourcen > Cache-Speicher > Caches aktualisieren .
Ich mag diese Option, weil ich den Cache nicht wie in anderen Antworten deaktivieren muss.
quelle
Es gibt keine Lösung, um das Zwischenspeichern von Browsern / Proxys zu verhindern, da Sie nicht die Kontrolle darüber haben können.
Die andere Möglichkeit, Ihren Benutzern neuen Inhalt zu erzwingen, besteht darin, die HTML-Datei umzubenennen! Genau wie https://www.npmjs.com/package/grunt-filerev für Assets.
quelle
Dokument alle 30 Sekunden aktualisieren:
w3schools HTML http-equiv Attribut
quelle