我试图防止用户在Angular中更改表单后离开表单。我已经阅读了一些有关此的文章,并找到了$ locationChangeStart。问题在于,在修改表单中的某些内容然后导航到其他页面后,不会触发此方法。仅调用window.onbeforeunload。
这是指令:
.directive(
'confirmOnExit',
function() {
return {
link : function($scope, elem, attrs) {
$scope
.$on(
'$locationChangeStart',
function(event, next, current) {
if ($scope.addEventForm.$dirty) {
if (!confirm("The form is dirty, do you want to stay on the page?")) {
event.preventDefault();
}
}
});
window.onbeforeunload = function() {
if ($scope.addEventForm.$dirty) {
return "You have unsaved information!";
}
};
}
};
形式如下:
<form name="addEventForm"
method="POST" ng-controller="formController" confirm-on-exit>
...
</form>
我哪里错了?
最佳答案
如果遇到这种情况,请按照注释中的建议尝试使用$ rootScope和$ locationChangeStart。或者,如果您使用的是Angular UI-Router,请使用$ stateChangeStart:
$rootScope.$on('$stateChangeStart', warnIfUnsavedChanges);
$ routeChangeStart(如果使用ngRoute)。
Difference between $locationChangeStart, $routeChangeStart, and $stateChangeStart