2013-03-16 20 views
19

Devo fare in modo che una coda di tutte le richieste avvenga contemporaneamente senza attendere la risposta dalla richiesta precedente in angularjs.
Ho una funzione di caricamento che mostra il caricamento div ogni volta che cambio la rotta url ma non è ok per fare un arretramento di coda in quella funzione.

Qualcuno può dirmi quale funzione viene chiamata nelle rotte angularjs ogni volta che cambio la route url?
ecco il codice itinerari:Quale funzione viene chiamata ogni volta che l'URL cambia in AngularJS?

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 
     }); 
    }); 

risposta

22

si potrebbe usare qualcosa di simile:

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

ma $ portata non è definito in percorsi. – Amb

+0

hai ragione, ho modificato la risposta, $ rootScope, invece, in una funzione di inizializzazione Module.run() – gargc

+1

Grazie .. funziona ma ora voglio l'elenco di tutte le richieste in sospeso nelle rotte o nel controller qualsiasi dove .. Hai qualche idea ? – Amb

23

$route servizio ha una serie di eventi è possibile monitorare utilizzando $.on in un controllore:

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

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

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

Vedere documento $route

È possibile impostare ng-show sul proprio elemento anziché utilizzare jQuery e impostare la variabile su true nella chiamata $routeChangeStart e false nella richiamata $routeChangeSuccess.

Un buon demo per questi eventi: https://github.com/johnlindquist/angular-resolve

Problemi correlati