我试图防止用户在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

10-08 18:46