2013-03-16 22 views
19

Angularjs'deki önceki isteğin yanıtını beklemeden aynı anda gerçekleşen tüm isteklerin bir sırasını yapmak zorundayım.
Her seferinde URL yolunu değiştirdiğimde, yükleme işlevini gösteren bir yükleme işlevi var, ancak bu işlevde bir sıra dizisi yapmak için tamam değil.

URL yolunu her değiştirdiğimde, angularjs rotalarında hangi işlevin çağrıldığını söyleyebilir miyim?AngularJS'de her seferinde url değişikliği için hangi işlev çağrılır?

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

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

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

: Bir denetleyici içinde $.on kullanarak izleyebilirsiniz

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

cevap

22

Sen gibi bir şey kullanabilirsiniz: burada
yolları kodudur Bakınız: $route

jQuery'yi kullanmak yerine öğenizde ng-show öğesini ayarlayabilir ve $routeChangeStart geri aramada true değerini true olarak ayarlayıp $routeChangeSuccess geri aramada false olarak ayarlayabilirsiniz. Bu olaylar için

İyi demo: https://github.com/johnlindquist/angular-resolve

+0

ama $ kapsam yolları olarak tanımlanmadı. – Amb

+0

haklısınız, cevabı düzenledim, bunun yerine, bir root.run() initialization işlevi – gargc

+1

içinde rootScope, teşekkürler .. çalışır ama şimdi beklemedeki tüm isteklerin listesini istediğiniz yerde veya denetleyicide istiyorum .. Herhangi bir fikrin var mı ? – Amb

23

$route hizmet bir dizi etkinlik vardır:

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 
     }); 
    }); 
İlgili konular