2013-04-22 64 views
2

我很努力地處理後退按鈕並向用戶詢問確認,如果應用程序狀態很髒。關閉選項卡並重新加載已通過onbeforeunload鉤子處理。在AngularJS中處理路線變化

我玩過$routeChangeStart,$beforeRouteChange等,但無法正確處理。 使用$routeChangeStart,在我的回調被調用之前,路由被有效地改變。

什麼是處理這種情況的正確方法是什麼?

感謝您的幫助。

回答

6

我相信$ locationChangeStart會在你喜歡的時候觸發。

+1

這個活動是不錯的。不幸的是,有一個錯誤,從來沒有被後退按鈕觸發,它剛剛在Angular中修復:https://github.com/angular/angular.js/pull/2206 – 2013-05-05 19:24:13

2

你可以使用:

$scope.$on('$routeChangeStart', function(next, current) { 
    //broadcasted before a route change 
    // do something here 
}); 

查看更多的是:$route

+0

我很抱歉,我已經在使用$ routeChangeStart,但在處理它之前,我的路由被有效地更改(在URL欄中)。 – 2013-04-22 07:06:14

+0

我覺得有一個誤解,網址欄已更改,因爲路由引擎正在響應*。當然它已經改變了!它會怎樣知道要打什麼路線? :-)但是你仍然可以選擇不處理路由,這是$ routeChangeStart的作用。我認爲這是最好的方法。 – 2013-05-05 01:52:39

1

請家長控制器髒狀態的模型,通用於所有的意見?如果任何視圖的控制器檢測到髒狀態,則會出現警告/確認,並顯示一個「取消」按鈕,將$ location.path(...)重置爲髒頁面。