2013-08-28 6 views
5

Mit AngularJS 1.2Wie sende ich vom http Interceptor aus?

Mein Abfangjäger wie folgt aussieht:

 $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); 
       }, 
... 

In meinem nav-Controller (die Griffe und bindet den Lader/Spinner zur Ansicht):

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

Die Sendung scheint nur einmal am Ende aller Antworten zu passieren, obwohl ich viele Anfrage sehen kann! im Konsolenprotokoll.

Wie muss ich meinen globalen Spinner/Loader verwalten?

BEARBEITEN Ich möchte einen Loader/Spinner in meiner Navbar anzeigen, wann immer Daten geladen werden.

+0

was wollen Sie mit diesen –

+0

@Ajaybeniwal bearbeiten erreichen: Zwecke hinzugefügt – Tjorriemorrie

Antwort

4

Die $watch Funktion nicht für Broadcast-Nachrichten nicht hören. Es überwacht Änderungen am Oszilloskop. In diesem Fall rufen Sie eine Funktion auf, wenn sich $rootScope.spin ändert, was sofort (standardmäßig) aufgerufen wird, weshalb Sie einmal aufgerufen wurden.

Die Funktion $on ist, was Sie hier wollen, wie es Broadcast-Ereignisse zu hören ist.

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

Ich habe ein komplettes Arbeitsbeispiel zusammen, wenn Sie neugierig sind:

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

3

Statt Watcher verwenden Sie sollten nur im Modul Run-Funktion verwenden, um auf

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

}]); 
+0

Wo kann ich mehr erfahren Infos zu 'run' und' $ on' und '$ 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 –