Winkliger UI-Router: Stoppt den Controller beim erneuten Drücken der Zurück-Taste im Browser

8

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.

%Vor%

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.

    
gaurav5430 18.12.2015, 11:21
quelle

1 Antwort

6

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:

%Vor%

Nun können Sie in Ihrer Statuskonfiguration $scope.globalData.preventExecution;

verwenden %Vor%

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.

    
Shashank Agrawal 18.12.2015, 11:31
quelle