Mein Problem mit dem einen hier eigentlich sehr ähnlich ist:
AngularJs - cancel route change event
Kurz gesagt, ich $ routeChangeStart bin mit und versuchen, den Strom zu ändern Route mit $ location. Wenn ich das mache, zeigt mir die Konsole, dass die Originalseite noch geladen ist und schnell von der neuen Seite überschrieben wird.
Als Lösung wurde $ locationChangeStart anstelle von $ routeChangeStart verwendet, was die zusätzliche Umleitung verhindern sollte. Leider verwende ich zusätzliche Daten im $ routeprovider, auf die ich zugreifen muss, während ich die Route ändere (ich verwende es, um Seitenbeschränkungen zu verfolgen). Hier ist ein Beispiel ...
$routeProvider.
when('/login', { controller: 'LoginCtrl', templateUrl: '/app/partial/login.html', access: false}).
when('/home', { controller: 'HomeCtrl', templateUrl: '/app/partial/home.html', access: true}).
otherwise({ redirectTo: '/login' });
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if(next.access){
//Do Stuff
}
else{
$location.path("/login");
//This will load the current route first (ie: '/home'), and then
//redirect the user to the correct 'login' route.
}
});
Mit $ routeChangeStart, kann ich die „next“ und „Strom“ Parameter (siehe AngularJS - $route) als Objekte meine ‚Zugang‘ Werte abzurufen. Mit $ locationChangeStart geben diese beiden Parameter URL-Strings zurück, keine Objekte. Es scheint also keine Möglichkeit zu geben, meine "Zugriffs" -Werte abzurufen.
Gibt es eine Möglichkeit, die Redirect-Stop-Power von $ locationChangeStart mit der Objektflexibilität von $ routeChangeStart zu kombinieren, um das zu erreichen, was ich brauche?
Entschuldigung für die späte Antwort. Wenn etwas für mich funktioniert, neige ich dazu, mich zu freuen und weiterzumachen. Dies endete als eine perfekte Lösung für das, was ich tat.In der Ladefunktion konnte ich Dinge wie '$ http' und '$ location' hinzufügen, um meine Anfragen weiter zu bearbeiten. – ThisLanham
Ich musste meine Ladefunktion eher wie die von Nick http://stackoverflow.com/a/19482187/1449799 aussehen lassen (der Ausschuss funktionierte nicht so wie hier geschrieben) – Michael
'load' Funktion sollte eher so lesen: 'var latent = $ q.defer(); if (Zugriff) {deferred.resolve(); } else {deferred.reject(); $ location.url ('/ login'); } return deferred.promise; ' – Clay