Tôi đang cố gắng đảm bảo rằng người dùng được xác thực trước khi cho phép họ chuyển sang trạng thái cụ thể. Khi tôi hiểu nó (sau khi xem xét các bài viết khác), một quá trình chuyển đổi trạng thái không nên xảy ra nếu quyết định của tiểu bang trả về một lời hứa bị từ chối và sự kiện '$ stateChangeError' sẽ được nâng lên. Tuy nhiên đây không phải là những gì tôi đang trải qua.Góc giao diện người dùng-Router - Trả lại lời hứa bị từ chối trong giải quyết không dừng chuyển tiếp trạng thái
Bước qua mã sau, tôi có thể thấy rằng lời hứa hoãn lại bị từ chối nhưng quá trình chuyển đổi trạng thái vẫn xảy ra và '$ stateChangeError' không được kích hoạt. Trong cấu hình mô-đun của tôi Tôi có tình trạng sau:
.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;
});
}]
}
})
trong cùng một module, trong hàm chạy tôi có:
$rootScope.$on('$stateChangeError',
function (event, toState, toParams, fromState, fromParams, error) {
$log.debug(error); <-- This is never called
$state.go('login');
});
tôi thiếu gì?
Rất tiếc! Có mắt quan sát. – Nick