Я пытаюсь заверить, что пользователь аутентифицирован, прежде чем позволить им перейти на определенные состояния. Насколько я понимаю (после просмотра других сообщений), переход состояния не должен происходить, если разрешение состояния возвращает отклоненное обещание и событие $stateChangeError должно быть поднято. Однако это не то, что я испытываю.
Выполняя следующий код, я вижу, что отложенное обещание отклонено, но переход состояния все еще происходит, и '$ stateChangeError' не запускается. В моей конфигурации модуля у меня следующее состояние:
.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;
});
}]
}
})
В том же модуле в функции запуска есть:
$rootScope.$on('$stateChangeError',
function (event, toState, toParams, fromState, fromParams, error) {
$log.debug(error); <-- This is never called
$state.go('login');
});
Что мне не хватает?