Angular UI-Router - Renvoyer la promesse rejetée dans la résolution n'arrête pas la transition d'état
Je suis en train d'assurer qu'un utilisateur est authentifié avant de leur permettre de faire la transition à des états spécifiques. Si je comprends bien (après l'examen d'autres postes), un état de transition ne devrait pas se produire si l'état de résoudre retourne le refus de la promesse et de la '$stateChangeError' événement doit être soulevée. Cependant, ce n'est pas ce que je suis en train de vivre.
Marcher à travers le code suivant, je peux voir que le report de la promesse est rejetée, mais la transition de l'état persiste et '$stateChangeError " n'est pas déclenché. Dans mon module de config j'ai l'état suivant:
.state('accounts', {
url: '/Accounts',
controller: 'AccountsController',
templateUrl: 'Scripts/angular/accounts/templates/accounts.tpl.html',
resolve: {
authenticated: ['$q', 'AccountService', function ($q, accountService) {
var deferred = $q.defer();
accountService.userLoggedIn().then(function (loggedIn) {
if (loggedIn) {
deferred.resolve();
} else {
deferred.reject('Not logged in'); <-- This happens
}
return deferred.promise;
});
}]
}
})
Dans le même module, dans la fonction run j'ai:
$rootScope.$on('$stateChangeError',
function (event, toState, toParams, fromState, fromParams, error) {
$log.debug(error); <-- This is never called
$state.go('login');
});
Ce qui me manque?
source d'informationauteur Nick
Vous devez vous connecter pour publier un commentaire.
Vous êtes de retour la promesse dans le mauvais endroit. Authentifié doit être une fonction qui renvoie une promesse, mais vous êtes juste de retour de la même promesse, dans le de la .alors() et la fonction puis authentifié est de retour indéfini:
Vous n'avez pas besoin de créer de nouveaux différé puisque vous avez déjà obtenir la promesse de userLoggedIn():