通常、フォームと入力フィールドでは、フォーム コントローラーはフォーム名属性の下で関連するスコープに公開されます。そして、NgModelController は入力名属性で公開されます。したがって、ngModel ディレクティブを含む入力フィールドの場合、入力フィールドの NgModelController は次のように取得できます。$scope.myFormName.myInputFieldName
問題は、ngRepeat ディレクティブ内の入力フィールドに対して同じことを行う (NgModelController を取得する) 方法です。
名前の一部として $index を使用して入力フィールドに名前を付けて、各テンプレート インスタンスに一意の名前を付けたいと思います。これで問題なくレンダリングされるので、
<input name="foo_{{$index}}" ...
$index == 3 でインスタンスをレンダリングします
<input name="foo_3" ...
しかし、公開された名前を介して ngModelController を取得しようとしても機能しません (未定義です)。
$scope.myFormName.foo_3
これを示すプランカーはこちら: http://plnkr.co/edit/jYDhZfgC3Ud0fXUuP7To?p=preview
「プレーンな」入力要素の ngModelController の取得と $setValidity の呼び出しに成功したことを示しています。また、ngRepeat ディレクティブ内の入力要素の ngModelController の取得に失敗したことも示しています。
以下のプランカーからコードの関連セクションをコピーしました。
<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)}}