親フォームとして ng-form を使用し、ng-repeat による検証のために子 mg-forms を使用しています。
<div ng-form="form">
<div ng-repeat="field in fields">
<div ng-form="subform"><input...></div>
</div>
</div>
そして、次のように検証します。
if ($scope.form.subform.$invalid && !$scope.form.subform.$error.required) {
// Do something...
}
(これは非常に単純化された例です。さまざまな入力タイプとさまざまな名前のさまざまなサブフォームがあります。たとえば、input[text] は TextForm という名前で、input[numeric] は NumericForm などです。)
フィールドにのみある場合、すべてが期待どおりに機能します。ただし、ng-repeat が複数のフィールドを生成する場合、検証は最後のサブフォームのみをトリガーし、他のサブフォームは無視されます。
すべてのサブフォームを循環して、それらのいずれかが無効かどうかを確認する方法はありますか?
また、次のように未記入の必須フィールドをすべてマークしています。
if ($scope.form.$error.required) {
angular.forEach($scope.form.$error.required,
function (object, index) {
$scope.form.$error.required[index].$setDirty();
}
);
}
したがって、私のフィールドが次のようになっている場合:
....ng-form="TextForm" ng-class="{ 'has-error': TextForm.$dirty && TextForm.$invalid }"....
また、同じ名前の同じサブフォームが多数ある場合でも、すべてのサブフォームをマークします。
無効なフィールドで同様のことができるでしょうか?いろいろ試してみても、どれもうまくいきませんでした...