AngularInDepth.com kodunu iyileştirme özgürlüğünü aldım , böylece iç içe geçmiş formlarda geçersiz girdileri yinelemeli olarak arar. FormArray-s veya FormGroup-s tarafından yuvalanması. Sadece en üst düzey formGroup'u girin ve geçersiz olan tüm FormControl'leri döndürür.
FormControl denetimini ve geçersiz dizi işlevselliğine eklemeyi ayrı bir işleve ayırırsanız, "instanceof" türü denetimlerinin bazılarını gözden geçirebilirsiniz. Bu, işlevin çok daha temiz görünmesini sağlardı, ancak tüm geçersiz formControls'lerin düz bir dizisini elde etmek için global, tek işlevli bir seçeneğe ihtiyacım vardı ve çözüm bu!
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;
}
Sadece ihtiyacı olanlar için, böylece kendileri kodlamak zorunda kalmazlar ..
1 Numaralı Düzenle
Ayrıca geçersiz FormArray ve FormGroups döndürmesi istendi, bu nedenle buna da ihtiyacınız varsa, bu kodu kullanın
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;
}