Angularjs - wie man $ routeProviders Caches von templateUrl löscht

8

Ich habe einen wirklich einfachen Anwendungsfall in meiner App, wo ich AngularJS (1.0.8) für das Frontend und Grails für das Backend verwende. Im App-Layout habe ich einen Sprachumschalter, mit dem der Benutzer die Sprache wechseln kann. Wenn Sie die Sprache wechseln, wird eine neue http-Anforderung zum Abrufen der Seite ausgeführt. Grails rendert alle sprachbezogenen Sachen (d. H. Etiketten) richtig übersetzt. Dies funktioniert nur für Chrome, FF und so, aber nicht für IE. IE gibt die richtige Sprache nur für das Layout aus, das von der Hauptanforderung gerendert wird.

Ich habe das Problem gefunden. Ich habe $routeProvider definiert, wo ich einen Großteil des App-Inhalts geladen habe. Es wird standardmäßig zwischengespeichert, daher lädt der IE templateUrl von $routeProvider nicht, weil er sie aus dem Cache lädt:

%Vor%

Was ich nicht verstehe ist, warum es in allen anderen Browsern funktioniert.

Ich habe einen Beitrag gefunden, wie man den Cache löscht, aber sie funktionieren nicht für mich. Gibt es eine Lösung für mich? Wenn nicht, finde ich $routeProvider für meinen Anwendungsfall völlig nutzlos. Post habe ich gefunden:

kuceram 29.11.2013, 11:42
quelle

3 Antworten

9

Unten sollte es tun. Sie können die Template-Caches von angularjs mit $ templateCache bearbeiten, sodass $ routeProvider die Vorlage bei jedem Zugriff auf den Controller als neu lädt.

%Vor%     
KinoP 24.10.2014 08:55
quelle
6

Ich hatte dasselbe Problem mit $ routeProvider. Und ja, der $ templateCache hilft in dieser Situation nicht. Anstatt die echte "Cache" -Quelle zu finden, habe ich den Stempel-Parameter nach der templateUrl hinzugefügt. In meinem Code:

%Vor%

Leider habe ich die globale Variable "BuildNumber" benutzt, um mein Leben zu retten. Da ich RequireJS auch für mein AngularJS-Projekt verwende, wird diese "Build-Nummer" auch zu jeder Abhängigkeits-JS-Datei hinzugefügt, indem der Code:

verwendet wird %Vor%

Dann muss ich jedes Mal, wenn der JS-Quell- oder Template-HTML-Code geändert wurde, nur diese "Build-Nummer" im globalen Gültigkeitsbereich aktualisieren. Dies ist nur ein Gedanke für zukünftige Updates in der Produktionsumgebung. Hoffe, das hilft.

    
Peng 06.12.2013 15:49
quelle
2

Die einzige Lösung, die ich gefunden habe, war, den Cache für Ajax-Abfragen vollständig zu deaktivieren. Ich habe die Lösung hier gefunden: Ссылка

%Vor%

Ich mag diese Lösung nicht, weil sie das Einlösen von Inhalten, die wirklich statisch sind, deaktiviert. Also, wenn Sie eine bessere Lösung haben, als es zu teilen.

    
kuceram 29.11.2013 14:18
quelle

Tags und Links