2013-03-16 33 views
19

我必須做出,而不必等待從angularjs先前請求的響應同時發生的所有請求的隊列。
我有一個加載函數,它顯示每次更改url路由時的加載div,但不能在該函數中創建隊列的隊列。

誰能告訴我該功能時,每次我更改URL路徑被稱爲在angularjs路線?
這裏是路線代碼:每次在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 
     }); 
    }); 

回答

22

您可以使用類似:

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

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

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

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

但$ scope沒有在路由中定義。 – Amb 2013-03-16 05:29:42

+0

你是對的,我已經編輯了答案,$ rootScope相反,在Module.run()初始化函數 – gargc 2013-03-16 06:13:44

+1

謝謝..它的作品,但現在我想在航線或在控制器上任何地方的所有未決請求列表..你有什麼主意嗎 ? – Amb 2013-03-16 06:34:22

23

$route服務有一系列的事件,你可以在控制器中使用$.on監控見文件$route

你可以設置你的元素上,而不是ng-show使用jQuery和設置變量爲true $routeChangeStart回調和$routeChangeSuccess回調假。

這些事件的一個很好的演示:https://github.com/johnlindquist/angular-resolve

相關問題