3

我有个问题。我有一个注册表单和许多其他表格。现在我想检查表单是否脏了,如果他们真的想离开/关闭这个页面,我会带一个确认框。
首先,当我使用浏览器的后退按钮而不是其他按钮([button..] 仅 4 个示例)返回时,确认框会显示两次,两次确认后我仍在同一页面上,只是表格被重置。当我按自己的时候,一切正常。
其次,当我关闭浏览器时,我的确认框出现了,之后浏览器的确认框也出现了,但我只想要其中一个。

$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() {})我在我的配置文件中通过每个 routeProvider 传递这个(templateUrl:blabla.html,控制器: blabal控制器)

问候,
炭疽病

4

1 回答 1

5

这是回答您问题的服务和指令。可能您可能考虑对其进行的唯一更改是$window在服务中使用而不是窗口。如说明所述,您只需将该属性添加unsaved-changes-warning到您的表单中。

https://github.com/facultymatt/angular-unsavedChanges

于 2013-10-15T15:41:47.070 回答