Как правило, с формой и полями ввода, контроллер формы публикуется в соответствующей области действия под атрибутом имени формы. И NgModelController публикуется под атрибутом имени ввода. Так для поля ввода с директивой ngModel, то NgModelController для поля ввода может быть получен как $scope.myFormName.myInputFieldName
Как получить NgModelController для полей ввода внутри директивы ngRepeat?
Вопрос в том, как сделать то же самое (получить NgModelController) для полей ввода внутри директивы ngRepeat?
Я хотел бы назвать поля ввода, используя $ index как часть имени, чтобы каждый экземпляр шаблона был уникально назван. Это делает ОК, так
<input name="foo_{{$index}}" ...
делает экземпляр с $ индексом == 3 до
<input name="foo_3" ...
Но пытается получить ngModelController с помощью опубликованных имен не работает (это не определено), например:
$scope.myFormName.foo_3
plunker показывает это здесь: http://plnkr.co/edit/jYDhZfgC3Ud0fXUuP7To?p=preview
это показывает, успешно получая ngModelController для «простого» элемента ввода и вызывая $ setValidity, а также показывает, что не удалось получить ngModelController для элемента ввода внутри директивы ngRepeat.
Скопировал соответствующий раздел кода из приведенного ниже plunker:
<div ng-repeat="element in elements">
<div ng-class="{error: form['foo_{{$index}}'].$invalid}">
<input name="foo_{{$index}}" ng-model="element.a" type="number">
<span ng-show="form['foo_{{$index}}'].$error.bar">ngRepeat bar invalid</span>
</div>
</div>
{{form.foo_0.$setValidity('bar', false)}}
Я бы предположил, что проблема заключается в том, что ng-repeat создает новую область видимости и что вы не можете просто получить доступ к детской области: похоже на этот ответ здесь: http://stackoverflow.com/questions/14491433/accessing-the-model -inside-a-ng-repeat Извините, у меня нет хорошей идеи, как изменить это, кроме написания настраиваемой директивы на данный момент:/ –