Отложить загрузку всей страницы в 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()
в каждом контроллере, не похоже на лучшую идею.
Ответы
Ответ 1
<html ng-app="yourApp">
angular.element(document).ready(function() {
angular.bootstrap(document, ["yourApp"]);
});
возможно, приложение для начальной загрузки может помочь...?
Если это не так, тогда проверьте этот пост!
Отмена изменения маршрута AngularJS до загрузки модели для предотвращения мерцания
Ответ 2
Я написал модуль angular, который выдает событие rootAcope "ajaxComplete" после завершения всех начальных запросов ajax.
Он использует перехватчик angular, который сбрасывает таймер при отправке нового запроса, а также отслеживает количество ожидающих запросов. Затем учитываются начальные запросы ajax, завершенные после возвращения всех ответов и никаких новых запросов не отправляются за 500 миллисекунд. В проекте git есть пример.
Счастливое кодирование.
https://github.com/jcarras/angular-ajax-complete