Подтвердить что ты не робот

Отложить загрузку всей страницы в AngularJS до завершения обслуживания ajax

У меня есть один configService в моем проекте AngularJS, который извлекает некоторые значения конфигурации всего проекта с сервера с помощью запроса ajax, т.е. нравится ли пользователю модерировать до активации учетной записи.

Чтобы отобразить информацию в соответствии с конфигурацией, вся загрузка первой страницы должна быть отложена до тех пор, пока этот запрос ajax не будет завершен. Моя служба выглядит так:

angular.module('clientApp').factory('configService', function ($http) {
    var configService = {};
    var conf = {};

    Object.defineProperty(configService, 'serverConfig', {
        get: function () {
            return conf;
        }
    });

    $http.get('/api/config').success(function (data) {
        conf = $.extend(conf, data);
    });

    return configService;
});

Итак, поскольку служба является одноэлементной, это будет выполняться только один раз, когда страница загружается, а не при каждом изменении маршрута.

Теперь я знаю, как использовать $q и promises, но моя проблема заключается в том, как отложить выполнение ВСЕХ из angular, пока эта служба не завершит свой запрос? Большинство моих представлений потребуют значений от configService.serverConfig и зависят от него для конкретного поведения - делают это асинхронно и имеют defered.then() в каждом контроллере, не похоже на лучшую идею.

4b9b3361

Ответ 2

Я написал модуль angular, который выдает событие rootAcope "ajaxComplete" после завершения всех начальных запросов ajax.

Он использует перехватчик angular, который сбрасывает таймер при отправке нового запроса, а также отслеживает количество ожидающих запросов. Затем учитываются начальные запросы ajax, завершенные после возвращения всех ответов и никаких новых запросов не отправляются за 500 миллисекунд. В проекте git есть пример.

Счастливое кодирование.

https://github.com/jcarras/angular-ajax-complete