2013-03-16 14 views
19

Ich muss eine Warteschlange aller Anfragen gleichzeitig machen, ohne auf die Antwort von der vorherigen Anfrage in angularjs zu warten.
Ich habe eine Ladefunktion, die das Lade-Div jedes Mal anzeigt, wenn ich die URL-Route ändere, aber es ist nicht in Ordnung, eine Warteschlange in dieser Funktion zu machen.

Kann mir jemand sagen, welche Funktion in angularjs Routen aufgerufen wird, wenn ich die URL-Route ändere?
ist hier die Routen Code:Welche Funktion wird jedes Mal aufgerufen, wenn sich die URL in AngularJS ändert?

angular.module('myApp', ['myApp.directives', 'myApp.services', 'myApp.filters']).config(
    function($routeProvider, $locationProvider, $httpProvider) { 
     $locationProvider.html5Mode(false); 
     $locationProvider.hashPrefix('!'); 

     $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 

     var loading = function (data, headersGetter) { 
      $('loadingDiv').show(); 
      return data; 
     }; 
     $httpProvider.defaults.transformRequest.push(loading); 

     $routeProvider. 
     when('/', { 
      templateUrl: 'elements/home/home.html', 
      controller: homeCtrl 
     }); 
    }); 

Antwort

22

Sie so etwas wie verwenden:

.run(function($rootScope, $location) { 
    $rootScope.$watch(function() { 
     return $location.path(); 
    }, 
    function(a){ 
     console.log('url has changed: ' + a); 
     // show loading div, etc... 
    }); 
}); 
+0

aber $ Umfang nicht in Strecken definiert. – Amb

+0

Sie haben Recht, ich habe die Antwort bearbeitet, $ rootScope stattdessen in einer Module.run() - Initialisierungsfunktion – gargc

+1

Danke .. es funktioniert, aber jetzt will ich die Liste aller ausstehenden Anfragen in Routen oder in Controller wo .. Hast du irgendeine Idee ? – Amb

23

$route Service verfügt über eine Reihe von Veranstaltungen können Sie mit $.on in einem Controller überwachen:

$rootScope.$on("$routeChangeStart", function(args){}) 

$rootScope.$on("$routeChangeSuccess".... 

$rootScope.$on("$routeChangeError".... 

Siehe Dokument $route

Sie könnten ng-show für Ihr Element festlegen, anstatt jQuery zu verwenden, und die Variable in $routeChangeStart callback und false in callback auf true festlegen.

Eine gute Demo für diese Ereignisse: https://github.com/johnlindquist/angular-resolve

Verwandte Themen