我正在使用angularjs中的表单验证,但我遇到了与此Google网上论坛帖子相同的问题:https://groups.google.com/forum/#!msg/angular/W1Yya5TfIWo/7jZbfL-wROUJ,空表单会在用户输入值之前“大喊”。
要解决此问题,我只会在字段为$dirty
(用户已触摸)时显示错误消息。但是,如果用户直接提交表单而没有触及任何内容,则表单将不会被提交(因为它不是$valid
),但它也不会显示任何错误消息(因为字段不是$dirty
})。
然后在先前关联的Google网上论坛帖子中建议“触摸”无效表单提交上的字段。我这样做的方式如下:
$scope._updateUntouchedFields = function(form) {
for(var f in form) {
var field = form[f];
if (field.$addControl !== undefined) {
// $addControl exists, this is a nested form
// recursively update fields in that form
$scope._updateUntouchedFields(field);
} else if (field.$setViewValue !== undefined) {
// $setViewValue exists, this is a field, just
// set the view value to the current view value
if(field.$dirty) continue;
field.$setViewValue(field.$viewValue);
}
}
};
如果表单在提交时无效,则上述函数为callid。我有两个问题:
<form>
标签中添加一个指令,我可以将这个功能放在哪里?就像现在一样,我需要在每个有表单的控制器中都有它,并将逻辑添加到提交函数。