আমি AngularInDepth.com- এর কোড উন্নত করতে স্বাধীনতা নিয়েছি , যাতে এটি পুনরাবৃত্তভাবে নেস্টেড ফর্মগুলিতেও অবৈধ ইনপুটগুলি অনুসন্ধান করে। এর চেয়ে বেশি এটি ফর্মআর-এস বা ফর্মগ্রুপ-এস দ্বারা বাসা বাঁধে। কেবলমাত্র শীর্ষ স্তরের ফর্মগ্রুপকে ইনপুট করুন এবং এটি অবৈধ সমস্ত ফর্মকন্ট্রোল ফিরিয়ে দেবে।
আপনি যদি ফর্মকন্ট্রোল চেক এবং পৃথক ফাংশনে অবৈধ অ্যারে কার্যকারিতা সংযোজন করতে চান তবে কিছু "উদাহরণস্বরূপ" টাইপ চেক দূরে স্কিম করতে পারেন। এটি ফাংশনটিকে অনেক পরিষ্কার দেখায়, তবে সমস্ত অবৈধ ফর্মকন্ট্রোলগুলির একটি ফ্ল্যাট অ্যারে পেতে আমার একটি গ্লোবাল, একক ফাংশন, বিকল্পের প্রয়োজন ছিল এবং এটিই সমাধান!
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
অনুরোধ করা হয়েছিল যে এটি অবৈধ ফর্মআরাই এবং ফর্মগ্রুপগুলিও ফেরত দেয়, সুতরাং আপনার যদি এটিরও প্রয়োজন হয় তবে এই কোডটি ব্যবহার করুন
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;
}