2

我有多个子 ng-form,它们是父 ng-form 的一部分,当我将父 ng-form 设置为 $submitted 状态时,我想设置所有子表单的 $submitted 状态。

到目前为止,表单控制器上没有这样的方法可用,请在此处检查

可以说,如果我想扩展当前的表单控制器来做到这一点,我应该怎么做?如何添加新方法$setChildFormsToSubmittedState()?当然,我想在不干扰/触摸角码的情况下做到这一点。

可能吗?我认为应该使用$addControl();.

不知道从哪里开始。

4

1 回答 1

4

您可以创建一个指令,将功能附加到表单控制器。$$parentForm只需通过检查项目是否具有与其所属的表单对象相等的属性来创建一个遍历所有控件的方法。

演示

Javascript

  .directive('myForm', function() {

    return {
      require: 'form',
      link: function(scope, elem, attr, form) {
        form.__setSubmitted = function() {
          setSubmitted(form);
        };

        function setSubmitted(form) {
          form.$submitted = true;
          angular.forEach(form, function(item) {
            if(item && item.$$parentForm === form) {
              setSubmitted(item);
            }
          });
        }
      }
    };

  });

HTML

<form name="myForm" my-form ng-submit="myForm.__setSubmitted()">
  <ng-form name="mySubForm1">
    <input type="text" ng-model="data.something1" name="something">
    {{mySubForm1.$submitted}}
  </ng-form>
  <br>

  <ng-form name="mySubForm2">
    <input type="text" ng-model="data.something2" name="something">
    {{mySubForm2.$submitted}}
  </ng-form>
  <br>

  <button type="submit">Button</button>
  {{myForm.$submitted}}
</form>
于 2015-01-03T06:57:05.220 回答