Wie kann ich ein Routenänderungsereignis in AngularJs abbrechen?
Mein aktueller Code ist
$rootScope.$on("$routeChangeStart", function (event, next, current) {
// do some validation checks
if(validation checks fails){
console.log("validation failed");
window.history.back(); // Cancel Route Change and stay on current page
}
});
Selbst wenn die Validierung fehlschlägt, zieht Angular die nächste Vorlage und die zugehörigen Daten und wechselt dann sofort zur vorherigen Ansicht / Route zurück. Ich möchte nicht, dass Angular die nächste Vorlage und die nächsten Daten abruft, wenn die Validierung fehlschlägt. Idealerweise sollte kein window.history.back () vorhanden sein. Ich habe sogar event.preventDefault () ausprobiert, aber keine Verwendung.
quelle
$routeChangeStart
dienext
Variable nur eine Zeichenfolge ist und keine Daten enthalten kann (zum Beispiel können Sie nicht auf definierte frühereauthorizedRoles
Variablen zugreifen )$location.path()
und$location.search()
Ein vollständigeres Codebeispiel mit
$locationChangeStart
Ich bin nicht ganz zufrieden damit, dies in meinem Root-Controller (Top-Level-Controller) anzuschließen. Wenn es ein besseres Muster gibt, würde ich gerne wissen. Ich bin neu in Angular :-)
quelle
Eine Lösung besteht darin, ein 'notAuthorized'-Ereignis zu senden und es im Hauptbereich abzufangen, um den Speicherort erneut zu ändern. Ich denke, es ist nicht die beste Lösung, aber es hat bei mir funktioniert:
und in meinem Hauptcontroller:
Hinweis: Es gibt einige Diskussionen zu diesem Problem auf einer eckigen Website, die noch nicht gelöst ist: https://github.com/angular/angular.js/pull/4192
BEARBEITEN:
Um den Kommentar zu beantworten, finden Sie hier weitere Informationen zu den Funktionen von LoginService. Es enthält 3 Funktionen:
(*) Meine Sitzung wird ausgefüllt, wenn sich die Route ändert. Ich habe dann die when () -Methode überschrieben, um die Sitzung zu füllen, wenn sie leer ist.
Hier ist der Code:
quelle
LoginService.isAuthenticated()
beim Laden der ersten Seite zurückkommt ? Wie lagern SiecurrentUser
? Was passiert, wenn der Benutzer die Seite aktualisiert (der Benutzer muss die Anmeldeinformationen erneut eingeben)?Für jeden, der darüber stolpert, ist eine alte Frage (zumindest in Winkel 1.4): Sie können dies tun:
quelle
Dies ist meine Lösung und funktioniert für mich, aber ich weiß nicht, ob ich auf dem richtigen Weg bin, weil ich neu in Webtechnologien bin.
quelle
Ich fand dieses relevant
Mein Beitrag könnte in Zukunft jemandem helfen.
quelle
quelle
Falls Sie verhindern müssen, dass sich die Route im
$routeChangeStart
Ereignis ändert (dh Sie möchten eine Operation basierend auf der nächsten Route ausführen ), injizieren Sie$route
und$routeChangeStart
rufen Sie an:quelle
$route.reload()
, muss anders sein, sonst wird wieder derselbe Code ausgeführt. Dies entspricht dem Erstellen einerwhile
Schleife mittrue
der Bedingung.