मैंने AngularInDepth.com -s कोड में सुधार करने के लिए स्वतंत्रता ली , ताकि यह गैर - कानूनी रूप से अमान्य इनपुटों की भी पुन: खोज कर सके। Wether यह FormArray-s या FormGroup-s द्वारा नेस्टेड है। बस शीर्ष स्तर फॉर्मग्रुप इनपुट करें और यह उन सभी फॉर्मकंट्रोल को लौटा देगा जो अमान्य हैं।
आप संभवतः कुछ "इंस्टोफ़" प्रकार के चेक को दूर कर सकते हैं, यदि आप फॉर्मकंट्रोल चेक को अलग कर देंगे और एक अलग फ़ंक्शन में अमान्य सरणी कार्यक्षमता को जोड़ देंगे। यह फ़ंक्शन को बहुत अधिक स्वच्छ बना देगा, लेकिन मुझे सभी अमान्य फ़ॉर्मकंट्रोल का एक फ्लैट सरणी प्राप्त करने के लिए एक वैश्विक, एकल फ़ंक्शन, विकल्प की आवश्यकता है और यह समाधान है!
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;
}
बस उन लोगों के लिए जो इसकी आवश्यकता है, इसलिए उन्हें इसे स्वयं कोड करने की आवश्यकता नहीं है।
# 1 संपादित करें
यह अनुरोध किया गया था कि यह अमान्य FormArray-s और FormGroups भी लौटाता है, इसलिए यदि आपको इसकी आवश्यकता है, तो भी इस कोड का उपयोग करें
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;
}