自动更新AngularJS中未触及的字段?

自动更新AngularJS中未触及的字段?,angularjs,Angularjs,我在angularjs中使用表单验证,但我遇到了与Google Groups线程中相同的问题:,空表单在用户输入值之前对他们“喊叫” 为了解决这个问题,我仅在字段为$dirty(用户已触摸)时显示错误消息。但是,如果用户直接提交表单而不触摸任何内容,则不会提交表单(因为它不是$valid),但也不会显示任何错误消息(因为字段不是$dirty) 然后,在之前链接的Google Groups线程中建议“触摸”无效表单提交上的字段。我使用以下方法来实现这一点: $scope._updateUntouc

我在angularjs中使用表单验证,但我遇到了与Google Groups线程中相同的问题:,空表单在用户输入值之前对他们“喊叫”

为了解决这个问题,我仅在字段为
$dirty
(用户已触摸)时显示错误消息。但是,如果用户直接提交表单而不触摸任何内容,则不会提交表单(因为它不是
$valid
),但也不会显示任何错误消息(因为字段不是
$dirty

然后,在之前链接的Google Groups线程中建议“触摸”无效表单提交上的字段。我使用以下方法来实现这一点:

$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);
    }
  }
};
如果表单在提交时无效,则调用上述函数。我对此有两个问题:

  • 如何确定当前表单控件是否是嵌套表单似乎有点像黑客。有没有更好的,更像角度的方法?理想情况下,我想要一个所有表单控件的列表,不管它们是否嵌套在其他表单中
  • 这能自动完成吗?有没有办法覆盖form指令,或者在
    标记中添加一个指令,我可以将此功能放在该标记中?现在,我需要在每个有表单的控制器中使用它,并将逻辑添加到submit函数中

  • 这可能会对您有所帮助:谢谢,这是同样的问题,但这会引入一个局部变量,它是在提交时手动设置的,而不是使用$dirty状态。我不确定哪一个是最好的(两个都有效),但我仍然希望以某种方式自动处理这个问题。