Angular js指令在表单中未保存数据时显示浏览器后退按钮的警报
Angular js directive to show alert for browser back button when unsaved data in form
我是angularjs的新手。当表单有未保存的数据并且用户按下浏览器返回按钮时,是否有任何方法显示警报。任何关于如何实现这一目标的建议都将不胜感激。
更新::
angular.module('myApp.directives', []).directive('confirmOnExit', function() {
return {
link: function($scope, elem, attrs) {
$scope.$on('$locationChangeStart', function(event, next, current) {
if ($scope.myForm.$dirty) {
if(!confirm("Ahh the form is dirty, do u want to continue?")) {
event.preventDefault();
}
}
});
window.onbeforeunload = function(){
alert('me');
if ($scope.myForm.$dirty) {
return "The Form is Dirty.";
}
}
}
};
});
更新的代码
angular.module('myApp.directives', []).directive('confirmOnExit', function () {
return {
link: function ($scope, elem, attrs, $rootScope) {
window.onbeforeunload = function () {
if ($scope.myForm.$dirty) {
return " do you want to stay on the page?";
}
}
$rootScope.$watch(function {
return $location.path();
},
function (newValue, oldValue) {
if (newValue != oldvalue) {
// here you can do your tasks
} else {}
},
true);
$scope.$on('$locationChangeStart', function (event, next, current) {
if ($scope.myForm.$dirty) {
if (!confirm("The form is dirty, do you want to stay on the page?")) {
event.preventDefault();
}
}
});
}
};
});
是的,我几分钟前刚刚给另一个用户给出了这个答案,在根作用域级别创建一个手表来捕捉位置变化:
$rootScope.$watch(function() { // fixed function declaration
return $location.path();
},
function(newValue, oldValue) {
if (newValue != oldValue) { // Update: variable name case should be the same
// here you can do your tasks
}
else {
}
},
true);
正如您所发现的,您可以编写一个自定义指令来监视更改。您的更新代码已步入正轨,但您可以做一些改进:
-
您的指令按名称引用表单,这限制了它的可重用性。例如,如果您想在一个名为
myOtherForm
的表单上使用相同的指令,该怎么办?目前使用$scope.myForm.$dirty
限制了这种灵活性。相反,更好的方法是在链接函数中绑定到formController。 -
确实没有必要观察
$location.path()
,因为绑定到$locationChangeStart
也会做同样的事情。
我写了一个angularjs指令,你可以使用我上面讨论过的方法@看见https://github.com/facultymatt/angular-unsavedChanges
希望您能发现该指令内容丰富。请随意从中学习,甚至在项目中使用它。
相关文章:
- 如何检测浏览器并根据浏览器显示视频
- 为什么浏览器显示原型属性不同
- Javascript,基于浏览器显示图像
- 浏览器显示/执行表单字段的警报
- 跨浏览器显示模态对话框替换
- 谷歌浏览器 - 显示和隐藏元素
- 请求节点.js后浏览器显示错误
- ajax如何防止浏览器显示ajax url
- 可以'无法在JS中访问document.cookie中的cookie,但浏览器显示存在cookie
- 为什么我的浏览器显示“;未获取引用错误“;在这里
- 如何在用户不刷新浏览器的情况下不断地向用户浏览器显示更新
- ie浏览器显示警告值“未定义”;但火狐和chrome显示出了实际价值
- 不完全回复来自服务器的警告消息用ie8浏览器显示
- 哪个事件导致浏览器显示HTML验证消息
- 检测浏览器-显示不同的链接
- 使浏览器显示下载文件列表
- 浏览器显示过时的JSP页面,用户必须手动刷新
- 浏览器显示区域的位置
- 浏览器显示'reactComponent未定义'在控制台
- 浏览器显示缓存文件而不是重定向