我正在使用这种方法:http://plnkr.co/edit/A6gvyoXbBd2kfToPmiiA?p=preview,只在模糊的时候验证字段。这样做很好,但我也想在用户点击'提交'按钮(不是真正的提交,而是对一个函数的数据-ng-点击调用)时验证它们(并因此显示这些字段的错误,如果有的话)。
有什么方法可以在点击该按钮时再次触发对所有字段的验证吗?
那么,angular的方法是让它处理验证,因为它在每次模型改变时都会这样做,并且只在你想的时候向用户显示结果。
在这种情况下,你决定什么时候显示错误,你只需要设置一个标志: http://plnkr.co/edit/0NNCpQKhbLTYMZaxMQ9l?p=preview
据我所知,有一个问题提交给angular,让我们有更高级的表单控制。既然这个问题还没有解决,我想用这个方法来代替重新发明所有现有的验证方法。
编辑:但如果你坚持你的方法,这里是你修改后的提交前的验证方法。http://plnkr.co/edit/Xfr7X6JXPhY9lFL3hnOw?p=preview 当按钮被点击时,控制器会广播一个事件,而指令会进行验证。
一种方法是强制所有属性都是脏的。你可以在每个控制器中这样做,但它会变得非常混乱。最好是有一个通用的解决方案。
我能想到的最简单的方法是使用一个指令
下面是指令的内容
myModule.directive('submit', function() {
return {
restrict: 'A',
link: function(scope, formElement, attrs) {
var form;
form = scope[attrs.name];
return formElement.bind('submit', function() {
angular.forEach(form, function(field, name) {
if (typeof name === 'string' && !name.match('^[\$]')) {
if (field.$pristine) {
return field.$setViewValue(field.$value);
}
}
});
if (form.$valid) {
return scope.$apply(attrs.submit);
}
});
}
};
});
并更新你的表单HTML,例如::
<form ng-submit='justDoIt()'>
成为:
<form name='myForm' novalidate submit='justDoIt()'>
在这里看到一个完整的例子:http://plunker.co/edit/QVbisEK2WEbORTAWL7Gu?p=preview