我有问题。我有一个注册表单和许多其他表单。 现在我想检查表格是否脏,然后如果他们真的想离开/关闭此页面,我会带一个确认框 首先,当我回到浏览器的后退按钮而不是我的其他按钮([按钮..]只有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)
的问候,
炭疽
答案 0 :(得分:5)
这是一个回答您问题的服务和指令。您可能考虑对其进行的唯一更改可能是在服务中使用$window
而不是窗口。如说明所述,您只需将属性unsaved-changes-warning
添加到表单中即可。