2013-10-04 59 views
2

我有一個模塊的運行功能,裏面有一個$routeChangeStart事件綁定。我想知道第一個routeChangeStart事件觸發的時間。我期待在第一次請求之後但在任何頁面呈現之前立即調用它,但這不是我所期望的。看起來這個事件是在頁面開始渲染後調用的。routeChangeStart事件和渲染的順序

module.run(function ($location, $rootScope) { 
     $rootScope.$on("$routeChangeStart", function (event, next, current) { 
     //do something with next.xxx 
     }); 
    }) 

預期的行爲是什麼?或者這是一個錯誤?

回答

0

事件在頁面開始渲染之前觸發,但這並不意味着在渲染開始之前您會捕獲它。事件被觸發,然後在調用堆棧中的下一件事是當Angular開始頁面呈現時(獲取模板,等待路徑解析屬性等),然後你捕獲事件。來自angular docs ...

在路由更改之前進行廣播。此時,路線服務 開始解決路線變更 發生所需的所有依賴關係。通常這涉及獲取視圖模板 作爲解析路由屬性中定義的任何依賴項。一旦解決了所有的 依賴關係,就會觸發$ routeChangeSuccess。

如果您需要執行類似條件阻止更改的操作,請嘗試使用$locationChangeStart事件。例如...

$scope.$on('$locationChangeStart', function (event) { 
    if (someCondition) { 
     event.preventDefault(); // prevent the change 
    } 
}); 

這將在Angular開始加載新頁面之前運行。