2013-10-15 48 views
3

我遇到問題。我有一個註冊表表格和許多其他形式。 現在我想檢查表格是否髒,然後如果他們真的想離開/關閉此頁面,我會帶上一個確認框。
首先,當我返回瀏覽器的後退按鈕而不是另一個按鈕([按鈕..]僅爲4個示例)時,確認框顯示兩次,兩次確認後我仍然處於相同的狀態頁面,只是表單被重置。當我按自己的一切工作正常。
其次,當我關閉瀏覽器時,我的確認框出現,然後瀏覽器確認框也顯示出來,但我只想要其中的一個。AngularJS指令用於在離開/關閉之前檢測未決更改頁面

$scope.$on('$locationChangeStart', function (event, next, current) { 
    if ($scope.requestForm.$dirty) { 
     if (!$window.confirm('Unsaved Changes, leave Page?')) { 
      //cancel leaving view2 
      //works when clicking links, but doesn't work when using the back button 
      event.preventDefault(); 
     } 
    } else { 

    } 
}); 

$scope.$watch("requestForm.$dirty", function (newval) { 
    window.myGlobalDirtyFlag = newval; 
}); 

window.onbeforeunload = function (e) { 
    if (window.myGlobalDirtyFlag === true) { 
     if (!$window.confirm('Unsaved Changes, close Page?')) { 
      //cancel leaving view2 
      //works when clicking links, but doesn't work when using the back button 
      return false; 
     } else { 

     } 
    } 
}; 

$scope.$on("$destroy", function() { 
    window.myGlobalDirtyFlag = false; 
}); 

五月也有人有一個想法,我怎麼把這個變成一個AngularJS指令,所以我沒有複製此代碼爲每一個網站在那裏我有它的形式。 (每個頁面只有1個表格,但每個表單名稱都不同!)
我的控制器在單獨的javascript文件中,(函數blablaController(){}),我在config文件中傳遞了這個routeProvider(templateUrl:blabla.html ,控制器:blabalController)

問候,
炭疽

+0

爲什麼不將它添加到根作用域? – lucuma

+0

嗯,我不得不說,我沒有很好的使用rootScope和指令,沒有一個例子..:/ 我想得到像「var form = $('button [type = submit]')這樣的表單。 .closest( 「形式」);」或者其他東西,並添加此參數使其適用於每種形式.. – Anthrax

回答

相關問題