AngularJS指令,用于在离开/关闭页面之前检测挂起的更改

时间:2013-10-15 15:11:34

标签: 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指令,所以我不必为每个有表单的网站复制此代码。 (每个页面只有1个表单,但每个表单名称都不同!)
我的控制器是单独的javascript文件,(函数blablaController(){})我在配置文件中传递了每个routeProvider(templateUrl:blabla.html,controller:blabalController)

的问候,
炭疽

1 个答案:

答案 0 :(得分:5)

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

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