Es scheint, dass der Controller des vorherigen Status standardmäßig neu geladen wird, wenn Sie im Browser auf die Zurück-Schaltfläche drücken, um in einen vorherigen Status zu wechseln. (Dies gilt nicht für Eltern-Kind-Zustände)
Wie kann ich das verhindern?
Da ich keine Daten in meinem aktuellen Zustand ändern werde, die den vorherigen Zustand beeinflussen können, möchte ich nicht, dass der vorherige Zustand erneut geladen wird.
Hier ist ein kleiner Plünderer: Ссылка
Es gibt zwei Zustände: home
und about
. Wenn Sie zu about
state gehen und dann die Zurück-Taste drücken, sehen Sie, dass der home
State Controller erneut aufgerufen wird.
Ich glaube, das ist das erwartete Verhalten, aber ich möchte es verhindern, weil mein vorheriger Zustand ( home
in diesem Fall) einige Visualisierungen macht, die einige Zeit brauchen, um wieder erstellt zu werden.
Beginnen wir mit einem globalen Controller wie GlobalCtrl
, der zum <body>
oder <html>
-Tag wie ng-controller="GlobalCtrl
hinzugefügt wird.
Dadurch können wir den Geltungsbereich dieser GlobalCtrl
auf Ihrer Angular-App mit einer einzelnen Seite (wie Sie ui-router verwenden) beibehalten.
Nun, in Ihrem GlobalCtrl
definieren Sie etwas wie folgt:
Nun können Sie in Ihrer Statuskonfiguration $scope.globalData.preventExecution;
Antwort auf die Frage : Der Bereich, den wir in der GlobalCtrl und den Bereich, den wir im State Controller verwenden, verwenden, wie hängen sie zusammen?
Nun, es ist eine sehr gute Frage, aber es ist einfach. Jedes Mal, wenn ein neuer Bereich in Angular erstellt wird, erbt er immer seinen übergeordneten Bereich (sofern nicht isoliert). Wenn also Ihr home
state Controller instanziiert wurde, wird sein Bereich in diesem Fall mit dem übergeordneten Status $rootScope
erzeugt und wir erzeugen globalData
in $rootScope
, was ein Objekt ist (ein Object
in Javascript kann sein verwendet, um es ist ein verschachteltes Objekt. Lesen Sie dies ). Wenn wir also globalData.preventExecution
true/false
setzen, können dieselben Daten in $scope
Ihres home
-Zustandscontrollers verwendet werden. Dies ist, wie beide Bereiche verwandt sind oder die gleichen Daten verwenden.
Beantworten Sie die Frage : Gibt es im ui-Router ein Flag oder eine Einstellung, die dies generell erreichen kann
Wenn Sie den obigen Verhaltenscode für mehrere Zustände erreichen möchten, können Sie etwas wie folgt schreiben:
%Vor%Nun können Ihre Zustände folgendermaßen geschrieben werden:
%Vor% Grundsätzlich verwenden wir preventHomeReExecution: true
als eine Flagge, die Sie wollten.
Tags und Links javascript angularjs angular-ui-router