2013-09-02 2 views
11

У меня есть один configService в моем проекте AngularJS, который извлекает некоторые значения конфигурации всего проекта с сервера с помощью запроса ajax, то есть, как нужно, чтобы пользователь должен был быть модерирующим до активации учетной записи.Отложить загрузку всей страницы в 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 и обещает, но моя проблема заключается в том, как отложить выполнение ВСЕГО углового, пока эта служба не завершит свой запрос? В большинстве моих представлений потребуются значения от configService.serverConfig и зависят от него для конкретного поведения - делать это асинхронно и иметь defered.then() в каждом контроллере не похоже на лучшую идею.

+0

Вы нашли решение? –

+1

Нет, только обходной путь (который не зависит от параметров конфигурации, доступных для загрузки страницы). Upvote может увеличить шанс :) – Dyna

ответ

1

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

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

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

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

Смежные вопросы