मैं markAsDirtyएक के अंदर सभी नियंत्रण करना चाहूंगा FormGroup।
मैं markAsDirtyएक के अंदर सभी नियंत्रण करना चाहूंगा FormGroup।
जवाबों:
पता चला कि Object.keysइस संभाल सकते हैं ..
Object.keys(this.form.controls).forEach(key => {
this.form.get(key).markAsDirty();
});
कोणीय 8+ के लिए, निम्नलिखित का उपयोग करें (माइकल एंजेलो उत्तर के आधार पर):
Object.keys(this.form.controls).forEach(key => {
this.form.controls[key].markAsDirty();
});
इसके लायक क्या है, Object.keys (...) जादू का उपयोग किए बिना ऐसा करने का एक और तरीका है :
for (const field in this.form.controls) { // 'field' is a string
const control = this.form.get(field); // 'control' is a FormControl
}
एक फ्लैट फॉर्म संरचना के लिए स्वीकृत उत्तर सही है, लेकिन मूल प्रश्न का पूरी तरह से उत्तर नहीं देता है। एक वेब पेज के लिए नेस्टेड फॉर्म्स और फॉर्मअरेस की आवश्यकता हो सकती है, और हमें एक मजबूत समाधान बनाने के लिए इस पर ध्यान देना चाहिए।
public markControlsDirty(group: FormGroup | FormArray): void {
Object.keys(group.controls).forEach((key: string) => {
const abstractControl = group.controls[key];
if (abstractControl instanceof FormGroup || abstractControl instanceof FormArray) {
this.markControlsDirty(abstractControl);
} else {
abstractControl.markAsDirty();
}
});
}
instanceofहमेशा टाइपस्क्रिप्ट द्वारा ट्रांसप्लेंट होने के बाद काम करेगा ?
instanceof-उल्लेखनीय एक टाइपस्क्रिप्ट-विशिष्ट कीवर्ड नहीं है ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) न तो classडेटा प्रकार है।
@Marcos उत्तर का उपयोग करते हुए मैंने एक फ़ंक्शन बनाया, जिसे एक फॉर्मग्रुप को पैरामीटर के रूप में पारित किया जा सकता है और यह प्रत्येक फॉर्मग्रुप बच्चों को गंदे को नियंत्रित करता है, बस कोड के चारों ओर अधिक स्थानों से इसे सेवा के अंदर डालने के लिए उपयोग करने योग्य बनाता है, उदाहरण के लिए।
public touchAllFormFields(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach((key) => {
formGroup.get(key).markAsDirty();
});
}
आशा करता हूँ की ये काम करेगा ;)
ऐसा लगता है कि get फ़ंक्शन अब अपने रूप में विशिष्ट मानों को कोणीय 8 में पुनः प्राप्त करने के लिए काम नहीं कर रहा है, इसलिए मैंने @Liviu Ilea के उत्तर के आधार पर इसे हल किया है।
for (const field in this.myForm.controls) { // 'field' is a string
console.log(this.myForm.controls[field].value);
}
Object.keys( this.registerForm.controls).forEach(key => {
this.registerForm.controls[key].markAsDirty();
});
मैं इसे बनाने के लिए यह फ़ंक्शन बनाता हूं * मेरा नाम 'ऑर्डर' के साथ नियंत्रण है, और उसके लिए इंडेक्स पास करें।
{"conditionGroups": [
{
"order": null,
"conditions": []
}
]
}
updateFormData() {
const control = <FormArray>this.form.controls['conditionGroups'];
control.value.map((x,index)=>{
x.order = index;
})
Cannot invoke an expression whose type lacks a call signature. Type 'AbstractControl' has no compatible call signatures.क्या किसी को पता है कि क्यों?