2013-08-22 2 views
2

У меня есть панель, содержащая три разных формы внутри моего контроллера. Теперь, поскольку я понимаю, что ng-include создает дочерний объект, который делает его недоступным из родительской области.

Чтобы решить данные формы, я передал ng-модель обратно в функцию, которую я запускаю в ng-submit, но это только один способ.

В нормальной ситуации я могу это сделать:

HTML Form tag example 
<form novalidate name="myForm" ng-submit="someFunction(form)"> 

HTML Form Field example 
<input ng-model="form.first_name" name="first_name" type="text" pwtest required/> 

Controller 
$scope.myForm.first_name.$setValidity('required', false); 

Это прекрасно работает и моя форма данных возвращения и я могу отправить его на пути к моему API и мое поле состояния также правильно установить.

Теперь к проблеме ..

HTML Form tag example 
<form novalidate name="myForm" ng-submit="someFunction(form)"> 

HTML Form Field example 
<input ng-model="form.first_name" name="first_name" type="text" pwtest required/> 

Controller 
$scope.myForm.first_name.$setValidity('required', false); <-- fails since myForm doesnt exist 

Это нормально работает, но теперь моя форма существует в childscope и поэтому Myform становится неопределенным в мой контроллер, как это должно быть, конечно, так как оно не существует в объем.

Вопрос в том, как я могу управлять состояниями полей формы в дочернем объекте моего родительского контроллера?

+0

добавляет контроллер ребенка вариант ? Вы можете ng-submit для метода дочернего контроллера, где он может установить правильность, тогда он мог бы вызвать метод на родительском контроллере. –

+0

См. Также http://stackoverflow.com/questions/15818431/how-can-i-check-an-ng-included-forms-validity-from-the-parent-scope –

+0

Возможно, просто чувствуйте, что оно должно быть проще? Но, возможно, это не так. Не могли бы вы дать небольшой фрагмент кода, как он мог бы выглядеть? – JoakimB

ответ

4

В соответствии с комментариями выше, вот один из способов решить эту проблему с помощью контроллера ребенок:

<script type="text/ng-template" id="/form.html"> 
    <form novalidate name="myForm" ng-submit="someFn()" ng-controller="ChildFormCtrl"> 
     <input ng-model="form.first_name" name="first_name" type="text" required> 
     <br>{{myForm.first_name.$valid}} 
    </form> 
</script> 

<div ng-controller="MyCtrl"> 
    <div ng-include="'/form.html'"></div> 
</div> 

function ChildFormCtrl($scope) { 
    $scope.someFn = function() { 
     console.log('child', $scope.form); 
     $scope.myForm.first_name.$setValidity('required', false); 
     $scope.parentFunction($scope.form); 
    } 
} 
function MyCtrl($scope) { 
    $scope.parentFunction = function (form) { 
     console.log('parent', form); 
    } 
} 

fiddle

+0

Я получил это, чтобы работать. Спасибо, Марк! – JoakimB