AngularJS: 从 ngForm 访问父表单?

AngularJS: Access parent form from ngForm?

这里是 AngularJS 通过 ngForm 进行表单验证的典型示例:

<form name="parentForm">
  <div ng-form="childForm">
    <input ... />
    <span class="error" ng-if="childForm.$invalid && (childForm.$dirty || parentForm.$submitted)">...</span>
  </div>
  ...
</form>

但是,如果您不知道名称 parentForm 或者它不在范围内,因为 childForm 在指令中怎么办?有没有办法通过 childForm 访问它?

可以通过 $$parentForm 属性.

从子表单访问父表单

所以你的 ng-if 表达式将是 childForm.$invalid && (childForm.$dirty || childForm.$$parentForm.$submitted)

请注意,这在 Angular 1.3 及更高版本中可用,在 1.2 中不可用。

您的 span 可能位于具有独立范围的指令中,从而使 $scope.childForm undefined。作为解决方法,您可以在指令中的范围内设置表单:

require: '^form',
link: function (formCtrl) {
  $scope[formCtrl.$name] = formCtrl;
}