Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.03.2014, 13:14
Новичок на форуме
Отправить личное сообщение для hopest Посмотреть профиль Найти все сообщения от hopest
 
Регистрация: 29.10.2013
Сообщений: 8

Как отследить окончание нескольких асинхронных запросов
Есть директива типа 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 асинхронной загрузкой данных, выходит мне надо зафиксировать роботу именно последнего исполнившегося запроса, как правильно организовать работу таких загрузок
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2014, 15:01
Аватар для FireVolkhov
Аспирант
Отправить личное сообщение для FireVolkhov Посмотреть профиль Найти все сообщения от FireVolkhov
 
Регистрация: 17.04.2013
Сообщений: 88

Для множества запросов есть $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);
    }
  }
});

и остается только собрать обещания всех контроллеров в одно обещание
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2014, 15:29
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Цитата:
.directive('loadingContainer', function () {
На первый взгляд порнография Используй шаблоны (template || templateUrl).

Сообщение от FireVolkhov
Для множества запросов есть $q.all
Я бы сказал, что для "управления" асинхронностью используют обещания.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отследить окончание нескольких ajax запросов mikel AJAX и COMET 2 11.03.2011 17:14
jScrollPane scrollTo, как повесить callback функцию на окончание прокрутки? com-meta jQuery 5 10.06.2010 23:14
Открытие сразу нескольких див-ов при нажатии на ссылку. Как? Jameson Элементы интерфейса 4 15.02.2010 22:03
как отследить событие загрузки img? GrEb Events/DOM/Window 3 12.02.2010 16:47
Как отследить ссылку по которой была открыта страница? Pastorman Общие вопросы Javascript 6 22.12.2009 16:08