У меня есть один 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()
в каждом контроллере, не похоже на лучшую идею.