Il mio problema è in realtà molto simile a quello che si trova qui:
AngularJs - cancel route change event
Insomma, sto usando $ routeChangeStart e cercando di cambiare l'attuale percorso usando $ posizione. Quando lo faccio, la console mi mostra che la pagina originale è ancora carica e viene rapidamente sovrascritta dalla nuova pagina.
La soluzione fornita era quella di utilizzare $ locationChangeStart anziché $ routeChangeStart, che dovrebbe funzionare per impedire il reindirizzamento extra. Sfortunatamente, sto utilizzando ulteriori dati nel $ routeprovider di cui ho bisogno per accedere durante la modifica del percorso (lo uso per monitorare le restrizioni della pagina). Ecco un esempio ...
$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.
}
});
Con $ routeChangeStart, posso utilizzare i parametri "prossimi" "correnti" (vedi AngularJS - $route) come oggetti di recuperare i miei valori 'Accesso'. Con $ locationChangeStart, questi due parametri restituiscono stringhe url, non oggetti. Quindi non sembra esserci alcun modo per recuperare i miei valori di 'accesso'.
C'è un modo per combinare il potere di interruzione del reindirizzamento di $ locationChangeStart con la flessibilità dell'oggetto di $ routeChangeStart per ottenere ciò di cui ho bisogno?
Ci scusiamo per la risposta tardiva. Quando qualcosa funziona per me, tendo ad emozionarmi e andare avanti. Questo finì per essere una soluzione perfetta per quello che stavo facendo.Nella funzione di caricamento, sono stato in grado di aggiungere cose come '$ http' e' $ posizione' per elaborare ulteriormente le mie richieste. – ThisLanham
Ho dovuto rendere la mia funzione di caricamento più simile a quella di Nick http://stackoverflow.com/a/19482187/1449799 (il rifiuto non funzionava come scritto qui) – Michael
La funzione 'load' dovrebbe essere più simile a questa: 'var deferred = $ q.defer(); if (access) {deferred.resolve(); } else {deferred.reject(); $ Location.url ('/ login'); } return deferred.promise; ' – Clay