EDIT - После прочтения ваших комментариев может возникнуть необходимость в создании системы очередей с инжекцией зависимостей и обратными вызовами.
app.factory('FirstService', function($rootScope, SecondService){
$rootScope.loading = true
.success(function(){
SecondService.AJAXCall();
});
})
.factory('SecondService', function($rootScope){
var vm = this;
vm.AJAXCALL = function(){
$rootScope.processing = true;
//AJAX Call
.complete(function(){
$rootScope.processing = false;
$rootScope.loading = false;
})
}
})
.controller('FirstController', function($rootScope){
var vm = this;
vm.loading = $rootScope.loading;
})
.controller('SecondController', function($rootScope){
var vm = this;
vm.processing = $rootScope.processing;
});
<div ng-controller="FirstController as first">
<form ng-disabled="first.loading"><form>
</div>
<div ng-controller="SecondController as second">
<img ng-show="second.processing" />
</div>
$broadcast
blasts the event down scope, так что имеет смысл, что они будут уволены сразу и не ставить в очередь событий. Вот визуализация:
Как и то, что предлагает muenchdo, возможно, вы захотите добавить переменную области видимости, чтобы указать, следует ли включать или отключать элементы управления.
Добавить логику к контроллеру:
app.module('AppCtrl', function($rootScope){
var vm = this;
vm.loading = $rootScope.loading;
});
Затем добавьте логику ngDisabled в HTML:
<div ng-controller="AppCtrl as app">
<form ng-disabled="app.loading"><form>
</div>
Тогда перед вашим вызовом AJAX, установить $rootScope
переменную:
app.service($rootScope){
$rootScope.loading = true;
//AJAX CALL
.complete(function(){
$rootScope.loading = false;
});
}
Вместо использования событий я бы установил переменную scope, как 'isLoading', на' true', когда вы отправляете свой req uest и вернуть его обратно в 'false', когда обещает запрос. Вы можете поместить переменную в '$ rootScope', если вам нужно получить доступ к ней повсюду в вашем приложении. – muenchdo
@muenchdo Флаг 'loading' был на самом деле оригинальным дизайном; однако код развился, и есть несколько служб, выполняющих AJAX и несколько пользовательских интерфейсов, отображаемых одновременно, поэтому должно быть несколько флагов. Кроме того, поскольку контроллеры (в дополнение к представлениям) должны быть уведомлены о событиях, вызов функции '$ scope' неизбежен, и я думаю, что обработчики событий лучше представляют намерение. –