2015-01-03 3 views
2

У меня есть несколько дочерних ng-форм, которые являются частью родительской ng-формы, я хочу установить статус отправки всех дочерних форм, когда я устанавливаю родительскую ng-форму в статус $ submit.расширение angularjs form controller

В настоящее время нет такого метода не доступен на форм-контроллера, проверил here

Давайте говорить, если я хочу, чтобы расширить текущий вид контроллера, чтобы сделать это, как я должен делать это? как добавить новый метод $setChildFormsToSubmittedState()? конечно, я хочу сделать это, не нарушая/не касаясь углового кода.

Возможно ли это? Я думаю, что все дочерние формы должны быть привязаны к родительской форме, используя $addControl();.

Не знаю, с чего начать.

+0

сделать директиву, и прикрепить слушатель там для представления родительской формы .. – Ved

ответ

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> 
+0

это работает, только один Цюй чень. почему 'angular.forEach (form,'. form - это объект, то зачем нам нужно для этого на нем? – harishr

+0

[** Согласование состояний AngularJS **] (https://docs.angularjs.org/api/ng/ function/angular.forEach): 'angular.forEach', вызывает функцию итератора один раз для каждого элемента в коллекции obj, который может быть либо объектом, либо массивом. – ryeballar

+0

ok, поэтому вы имеете в виду, что' form' может когда-нибудь быть сборником , поэтому нам нужно для каждого. – harishr