javascript - 用于在离开/关闭页面之前检测未决更改的 AngularJS 指令

标签 javascript jquery angularjs angularjs-directive

我有一个问题。我有一张注册表和许多其他表格。 现在我想检查表单是否脏了,如果他们真的想离开/关闭此页面,我会带上一个确认框。
首先,当我使用浏览器的后退按钮而不是其他按钮([按钮..] 仅 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 指令,这样我就不必为每个有表单的站点复制这段代码。 (每个页面只有一个表单,但是每个表单的名字都不一样!)
我的 Controller 在单独的 javascript 文件中,(函数 blablaController() {}),我在我的配置文件中为每个 routeProvider 传递这个(templateUrl:blabla.html, Controller :blabalController)

问候,
炭疽病

最佳答案

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

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

关于javascript - 用于在离开/关闭页面之前检测未决更改的 AngularJS 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19384802/

相关文章:

javascript - Material UI 选项卡 : After switch between tabs, 选项卡中的更改被丢弃

javascript - 更新 Angular d3 文本 onclick

javascript - 在 AngularJS 中加载本周的数据

javascript - Angular Meteor 应用程序在本地主机中运行,但在部署到服务器时失败

javascript - 使用 ajax 填充 html 容器

android - 使Android代码跨平台

javascript - 关于 JavaScript 变量的快速问题

javascript - 在 javascript 中求解公式的最有效方法

javascript - 如果第一个字符不匹配,regexp exec 内部索引不会进行

jquery - (jquery) 屏蔽输入插件在达到最大长度时覆盖文本