Какая функция вызывается каждый раз, когда URL-адрес изменяется в AngularJS?

Я должен сделать очередь из всех запросов, происходящих одновременно, не дожидаясь ответа от предыдущего запроса в angularjs.
У меня есть функция загрузки, которая показывает загрузку div каждый раз, когда я меняю маршрут URL, но это не нормально сделать массив очереди в этой функции.

Может ли кто-нибудь сказать мне, какая функция вызывается в маршрутах angularjs, когда каждый раз, когда я меняю маршрут URL?
ЗДЕСЬ код маршрутов:

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

person Amb    schedule 16.03.2013    source источник


Ответы (2)


Вы можете использовать что-то вроде:

.run( function($rootScope, $location) {
   $rootScope.$watch(function() { 
      return $location.path(); 
    },
    function(a){  
      console.log('url has changed: ' + a);
      // show loading div, etc...
    });
});
person garst    schedule 16.03.2013
comment
но $scope не определен в маршрутах. - person Amb; 16.03.2013
comment
вы правы, я отредактировал ответ вместо $rootScope в функции инициализации Module.run() - person garst; 16.03.2013
comment
Спасибо .. это работает, но теперь мне нужен список всех ожидающих запросов на маршрутах или в контроллере где угодно .. У вас есть идеи? - person Amb; 16.03.2013

Служба $route имеет ряд событий, которые вы можете отслеживать с помощью $.on в контроллере:

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

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

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

См. документ $route.

Вы можете установить ng-show для своего элемента вместо использования jQuery и установить для переменной значение true в обратном вызове $routeChangeStart и false в обратном вызове $routeChangeSuccess.

Хорошая демонстрация для этих событий: https://github.com/johnlindquist/angular-resolve.

person charlietfl    schedule 16.03.2013