2013-09-02 13 views
11

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.

+0

znalazłeś rozwiązanie? –

+1

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

Odpowiedz

1

Napisałem moduł kątowy, który emituje zdarzenie "ajaxComplete" rootScope, gdy wszystkie wstępne żądania ajax zostaną zakończone.

Używa kątowego przechwytywacza, który resetuje zegar po wysłaniu nowego żądania, a także śledzi liczbę oczekujących żądań. Następnie rozpatruje początkowe żądania ajax zakończone po zwróceniu wszystkich odpowiedzi i żadne nowe żądania nie są wysyłane przez 500 milisekund. Istnieje przykład w projekcie git.

Szczęśliwe kodowanie.

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

Powiązane problemy