РЕДАГУВАТИ: Ось ще простіше рішення, перевірене та приємно працює:
У моєму головному контролері я просто є
$scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
if (toState.resolve) {
$scope.showSpinner();
}
});
$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
if (toState.resolve) {
$scope.hideSpinner();
}
});
Це показує обертач, коли ми збираємося перейти до стану, який має щось вирішити, і приховує його, коли зміна стану завершиться. Можливо, ви захочете додати деяку перевірку ієрархії стану (тобто також показати вертушку, якщо батьківський стан, який завантажується, щось вирішує), але це рішення для мене добре працює.
Ось моя стара пропозиція для довідки та як альтернатива:
У своєму контролері додатків прослухайте stateChangeStart
подію та перевірте, чи збираєтеся ви перейти в стан, коли ви хочете показати обертання під час вирішення (див. Https://github.com/angular-ui/ui-router/wiki/Quick -Посилання # wiki-events-1 )
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
if (toState.name == 'state.with.resolve') {
$scope.showSpinner();
}
})
Коли нарешті викликається контролер, ви можете приховати спінер
.controller('StateWithResolveCtrl', function($scope) {
$scope.hideSpinner();
})
Ви також можете перевірити наявність помилок, які могли виникнути під час вирішення, прослухавши файл $stateChangeError
подію та приховавши анімацію під час обробки помилки.
Це не зовсім чисто, оскільки ви розподіляєте логіку спінера між контролерами, але це спосіб. Сподіваюся, це допоможе.