Как отследить окончание нескольких асинхронных запросов
Есть директива типа loading
.directive('loadingContainer', function () {
return {
restrict: 'A',
scope: false,
link: function (scope, element, attrs) {
var loadingLayer = angular.element('<div class="loading">div>');
element.append(loadingLayer);
element.addClass('loading-container');
scope.$watch(attrs.loadingContainer, function (value) {
loadingLayer.toggleClass('ng-hide', !value);
});
}
};
})
//html
<div loading-container="vm.loading"></div>
//js
getData: function ($defer, params) {
$scope.vm.loading = true;
dataFactory.getTasksLevel0(params.page(), params.count(), $scope.vm.isLoadArchiv, $scope.vm.fltr_TaskType).success(function (data) {
dataFactory.tasksMakeAdditonalFields(data.Data.TasksLevel0, $sce);
params.total(data.Data.CountTasks);
$scope.vm.loading = false;
…..
Блокируется экран во время загрузки данных Но вот если на странице несколько контролеров c асинхронной загрузкой данных, выходит мне надо зафиксировать роботу именно последнего исполнившегося запроса, как правильно организовать работу таких загрузок |
Для множества запросов есть $q.all вот урок как пользоваться
в директиве что-то такое
scope.$watch(attrs.loading, function(newVal, oldVal, scope){
if(newVal){
if(newVal.$promise && !newVal.$resolved){
promise = newVal.$promise;
} else {
promise = newVal;
}
if(_.isFunction(promise.finally)){
startLoading();
promise.finally(endLoading);
}
}
});
и остается только собрать обещания всех контроллеров в одно обещание |
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 02:53. |