J'ai pris la liberté d'améliorer AngularInDepth.com-s code, afin qu'il effectue une recherche récursive dans pour non valides entrées dans des formulaires imbriqués aussi. Si il être imbriquées par FormArray-s ou FormGroup-s. Il suffit de saisir le haut niveau formGroup et il sera de retour tous les FormControls qui ne sont pas valides.
Vous pouvez éventuellement écrémé certains de la "instanceof" les vérifications de type suite, si vous souhaitez séparer les FormControl de vérifier et de plus non valide éventail de fonctionnalités dans une fonction séparée. Cela rendrait la fonction look beaucoup plus propre, mais j'avais besoin d'un mondial, unique fonction, l'option pour obtenir un tableau plat toutes les invalides formControls et c'est la solution!
findInvalidControls( _input: AbstractControl, _invalidControls: AbstractControl[] ): AbstractControl[] {
if ( ! _invalidControls ) _invalidControls = [];
if ( _input instanceof FormControl ) {
if ( _input.invalid ) _invalidControls.push( _input );
return _invalidControls;
}
if ( ! (_input instanceof FormArray) && ! (_input instanceof FormGroup) ) return _invalidControls;
const controls = _input.controls;
for (const name in controls) {
let control = controls[name];
switch( control.constructor.name )
{
case 'AbstractControl':
case 'FormControl':
if (control.invalid) _invalidControls.push( control );
break;
case 'FormArray':
(<FormArray> control ).controls.forEach( _control => _invalidControls = findInvalidControls( _control, _invalidControls ) );
break;
case 'FormGroup':
_invalidControls = findInvalidControls( control, _invalidControls );
break;
}
}
return _invalidControls;
}
Juste pour ceux qui en ont besoin, de sorte qu'ils n'ont pas de code d'eux-mêmes..
Edit #1
Il a été demandé qu'il renvoie également invalide FormArray-s et FormGroups, donc si vous avez besoin aussi, utilisez ce code
findInvalidControls( _input: AbstractControl, _invalidControls: AbstractControl[] ): AbstractControl[] {
if ( ! _invalidControls ) _invalidControls = [];
if ( _input instanceof FormControl ) {
if ( _input.invalid ) _invalidControls.push( _input );
return _invalidControls;
}
if ( ! (_input instanceof FormArray) && ! (_input instanceof FormGroup) ) return _invalidControls;
const controls = _input.controls;
for (const name in controls) {
let control = controls[name];
if (control.invalid) _invalidControls.push( control );
switch( control.constructor.name )
{
case 'FormArray':
(<FormArray> control ).controls.forEach( _control => _invalidControls = findInvalidControls( _control, _invalidControls ) );
break;
case 'FormGroup':
_invalidControls = findInvalidControls( control, _invalidControls );
break;
}
}
return _invalidControls;
}