Alle obigen Antworten brechen das erwartete Browserverhalten. Was die meisten Leute wollen, ist etwas, das nach oben scrollt, wenn es sich um eine "neue" Seite handelt, aber zur vorherigen Position zurückkehrt, wenn Sie über die Schaltfläche "Zurück" (oder "Vorwärts") dorthin gelangen.
Wenn Sie den HTML5-Modus annehmen, stellt sich heraus, dass dies einfach ist (obwohl ich sicher bin, dass einige kluge Leute da draußen herausfinden können, wie man dies eleganter macht!):
// Called when browser back/forward used
window.onpopstate = function() {
$timeout.cancel(doc_scrolling);
};
// Called after ui-router changes state (but sadly before onpopstate)
$scope.$on('$stateChangeSuccess', function() {
doc_scrolling = $timeout( scroll_top, 50 );
// Moves entire browser window to top
scroll_top = function() {
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
Die Funktionsweise besteht darin, dass der Router davon ausgeht, dass er nach oben scrollen wird, sich jedoch etwas verzögert, um dem Browser die Möglichkeit zu geben, den Vorgang abzuschließen. Wenn der Browser uns dann benachrichtigt, dass die Änderung auf eine Vorwärts- / Rückwärtsnavigation zurückzuführen ist, wird das Zeitlimit abgebrochen und der Bildlauf wird nie ausgeführt.
Ich habe Raw- document
Befehle zum Scrollen verwendet, weil ich zum gesamten oberen Rand des Fensters wechseln möchte. Wenn Sie nur ui-view
scrollen möchten , legen autoscroll="my_var"
Sie my_var
mithilfe der oben beschriebenen Techniken fest, wo Sie steuern . Aber ich denke, die meisten Leute werden die gesamte Seite scrollen wollen, wenn Sie als "neu" auf die Seite gehen.
Die oben genannten Verwendungen ui-Router, obwohl Sie könnte ng-Route verwenden , anstatt durch den Austausch $routeChangeSuccess
für $stateChangeSuccess
.