2013-08-28 10 views
5

Korzystanie angularjs 1.2Jak mogę transmitować z przechwytywacza HTTP?

Moja przechwytujących wygląda następująco:

 $httpProvider.interceptors.push(['$q', '$log', '$rootScope', function ($q, $log, $rootScope) { 
      return { 
       'request': function(config) { 
        $rootScope.$broadcast('spin'); 
        console.info('request!'); 
        return config || $q.when(config); 
       }, 
... 

W moim kontrolerem nawigacyjnym (który obsługuje i wiąże ładowarka/spinner do widoku):

$rootScope.$watch('spin', function(event) { 
    console.info('spin'); 
    $scope.spinner++; 
}); 

Transmisja wydaje zdarza się tylko raz na końcu wszystkich otrzymanych odpowiedzi, mimo że widzę wiele żądań ! w logu konsoli.

Jak zarządzać globalną tarczą/ładowarką?

EDYTOWANIE Chcę pokazać ładowacz/pokrętło w moim pasku nawigacyjnym przy ładowaniu danych.

+0

co chcesz osiągnąć za pomocą tego –

+0

@Ajaybeniwal edit: cele dodany – Tjorriemorrie

Odpowiedz

4

Funkcja $watch nie słucha wiadomości telewizyjnych. Obserwuje zmiany w zakresie. W tym przypadku wywołujesz funkcję, gdy tylko zmieni się $rootScope.spin, która jest wywoływana (domyślnie), dlatego została wywołana jeden raz.

Funkcja jest tutaj, ponieważ jest to, co będzie słuchać transmisji wydarzeń.

$rootScope.$on('spin', function(msg, data) { 
    console.info('spin'); 
    $scope.spinner++; 
}); 

I już ułożyła kompletnym przykładem pracy, jeśli jesteś ciekaw:

http://codepen.io/BrianGenisio/pen/wIBHz

3

Zamiast obserwatora powinien po prostu użyć na w funkcji modułu run

angular.module('test',[]).run(['$rootScope' function ($rootScope) { 
    $rootScope.$on("$spin", function() { 
     // set the spinner here 
    }); 

}]); 
+0

Gdzie znajdę więcej informacje na temat 'run' i' $ on' oraz '$ broadcast'? – Tjorriemorrie

+0

http://code.angularjs.org/1.2.0rc1/docs/api/angular.Module http://code.angularjs.org/1.2.0rc1/docs/api/ng.$rootScope.Scope –

Powiązane problemy