Mam pojedynczy configService
w moim projekcie AngularJS, który pobiera niektóre wartości konfiguracyjne całego projektu z serwera za pomocą żądania ajax, np. Czy użytkownik musi być moderowany czy nie zanim ich konto zostanie aktywowane.Odłóż całe ładowanie strony w AngularJS, aż ajax usługi zakończy się
Aby wyświetlić informacje zgodnie z konfiguracją, całe pierwsze ładowanie strony powinno zostać odłożone do czasu zakończenia żądania ajax. Moje usługi wygląda następująco:
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;
});
Tak, ponieważ usługa jest pojedyncza, to zostanie wykonana tylko raz, gdy strona się ładuje, a nie na każdej zmianie trasy.
Teraz wiem, jak korzystać z $q
i obiecuje, ale moim problemem jest, w jaki sposób można odroczyć wykonanie wszystkich kątowe, aż ta usługa zakończy swoje żądanie? Większość moich widoków będzie wymagać wartości od configService.serverConfig
i zależą od niego dla określonego zachowania - robienie tego asynchronicznie i mieć defered.then()
w każdym kontrolerze nie wydaje się najlepszym pomysłem.
znalazłeś rozwiązanie? –
Nie, tylko obejście (które nie polega na tym, że opcje konfiguracyjne będą dostępne przy ładowaniu strony). Awanse mogą zwiększyć szansę :) – Dyna