Nachdem $http
ich die gesamte Seite basierend auf mehreren Benutzerkontexten gerendert und mehrere Anforderungen gestellt habe, möchte ich, dass der Benutzer die Kontexte wechseln und alles erneut rendern kann (erneutes Senden aller $http
Anforderungen usw.). Wenn ich den Benutzer nur an eine andere Stelle umleitung, funktionieren die Dinge ordnungsgemäß:
$scope.on_impersonate_success = function(response) {
//$window.location.reload(); // This cancels any current request
$location.path('/'); // This works as expected, if path != current_path
};
$scope.impersonate = function(username) {
return auth.impersonate(username)
.then($scope.on_impersonate_success, $scope.on_auth_failed);
};
Wenn ich verwende $window.location.reload()
, werden einige der $http
Anfragen auth.impersonate(username)
, die auf eine Antwort warten, abgebrochen, sodass ich das nicht verwenden kann. Außerdem $location.path($location.path())
funktioniert der Hack auch nicht (nichts passiert).
Gibt es eine andere Möglichkeit, die Seite neu zu rendern, ohne alle Anforderungen erneut manuell auszugeben?
Antworten:
Für den Datensatz können Sie Folgendes verwenden, um den Winkel zum erneuten Rendern der aktuellen Seite zu erzwingen:
Laut AngularJS- Dokumentation :
quelle
$route.reload()
bei einer normalen Aktualisierung. Beispielsweise wird eine Registerkarte so eingestellt, dass sie beim Aktualisieren anfänglich angezeigt wird. Wenn die Methode zum erneuten Laden die Seite jedoch neu zu laden scheint, ohne die Registerkarte festzulegen, ist das Problem nicht sicher.$route
in den Controller zu injizieren , damit dies funktioniert.angular.js file
. Wenn Sie weiterhin verwenden, müssen$routeProvider
Sie jetztangular-route.js
in Ihren HTML-Code aufnehmen:$route.reload()
wird die Controller neu initialisieren, aber nicht die Dienste. Wenn Sie den gesamten Status Ihrer Anwendung zurücksetzen möchten, können Sie Folgendes verwenden:Dies ist eine Standard-DOM-Methode, auf die Sie zugreifen können, um den $ window- Dienst zu injizieren .
Wenn Sie sicher sein möchten, dass die Seite vom Server neu geladen wird, z. B. wenn Sie Django oder ein anderes Webframework verwenden und ein neues serverseitiges Rendern wünschen, übergeben Sie
true
als Parameter anreload
, wie in den Dokumenten erläutert . Da dies eine Interaktion mit dem Server erfordert, ist diese langsamer, daher nur bei BedarfWinkel 2
Das Obige gilt für Angular 1. Ich nicht Angular 2 verwende, sieht aus wie die Dienste unterscheiden sich dort, gibt es
Router
,Location
und dasDOCUMENT
. Ich habe dort keine unterschiedlichen Verhaltensweisen getestetquelle
Zum erneuten Laden der Seite für einen bestimmten Routenpfad: -
quelle
Wenn Sie einen eckigen UI-Router verwenden, ist dies die beste Lösung.
quelle
Vielleicht haben Sie vergessen, "$ route" hinzuzufügen, als Sie die Abhängigkeiten Ihres Controllers deklarierten:
quelle
Verwenden Sie window.location.reload (), um alles neu zu laden. mit eckigen js
Schauen Sie sich das Arbeitsbeispiel an
HTML
eckigJS
http://jsfiddle.net/HB7LU/22324/
quelle
Wenn Sie den Controller aktualisieren möchten, während Sie die von Ihnen verwendeten Dienste aktualisieren, können Sie folgende Lösung verwenden:
dh
Dadurch werden der Controller und der HTML- Code aktualisiert . Sie können ihn auch als Aktualisieren oder erneut rendern bezeichnen .
quelle
Vor Angular 2 (AngularJs)
Durch die Route
Wenn Sie die gesamte Anwendung neu laden möchten
Winkel 2+
Oder
quelle
Die einfachste Lösung, die ich mir vorgestellt habe, war:
Fügen Sie der Route, die bei jeder Rückkehr neu geladen werden soll, '/' hinzu.
z.B:
anstelle der folgenden
verwenden,
quelle
/
: O Meine Route sieht jetzt folgendermaßen aus://
Versuchen Sie eine der folgenden Möglichkeiten:
quelle
Ich habe diesen Arbeitscode zum Entfernen des Caches und zum erneuten Laden der Seite erhalten
Aussicht
Regler
Injektoren: $ scope, $ state, $ stateParams, $ templateCache
quelle
Verwenden Sie den folgenden Code ohne vertrauliche Benachrichtigung beim erneuten Laden an den Benutzer. Die Seite wird gerendert
quelle
Ich habe seit Monaten einen harten Kampf mit diesem Problem und die einzige Lösung, die für mich funktioniert hat, ist folgende:
quelle
$window.location.reload()
was das OP ausdrücklich erwähnt, funktioniert in seinem Fall nicht richtig.