扩展angularjs形式控制器

时间:2015-01-03 05:18:44

标签: angularjs angularjs-ng-form

我有多个子ng格式,它们是父格式的一部分,我想设置所有子格式的$ submit状态,当我将父格式设置为$ submit状态时。

截至目前,表单控制器上没有此类方法,请选中here

可以说,如果我想扩展当前的表单控制器来执行此操作,我应该怎么做?如何添加新方法$setChildFormsToSubmittedState()?当然我想在不打扰/触摸角度代码的情况下这样做。

有可能吗?我认为应该使用$addControl();将所有子表单挂钩到父表单中。

不知道从哪里开始。

1 个答案:

答案 0 :(得分:4)

您可以创建一个将功能附加到表单控制器的指令。只需创建一个迭代所有控件的方法,方法是检查一个项是否具有等于它所属的表单对象的$$parentForm属性。

<强> DEMO

<强>的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>