20

我必须同时发生所有请求的队列,而无需等待 angularjs 中上一个请求的响应。
我有一个加载函数,每次更改 url 路由时都会显示加载 div,但在该函数中创建队列数组是不行的。

每次我更改 url 路由时,谁能告诉我在 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
        });
   });
4

2 回答 2

24

你可以使用类似的东西:

.run( function($rootScope, $location) {
   $rootScope.$watch(function() { 
      return $location.path(); 
    },
    function(a){  
      console.log('url has changed: ' + a);
      // show loading div, etc...
    });
});
于 2013-03-16T05:26:12.710 回答
24

$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

于 2013-03-16T11:08:56.070 回答