कोणीय 2 अक्षम नियंत्रण फ़ॉर्म में शामिल नहीं होते हैं


113

मैंने देखा है कि यदि मैं एक कोणीय 2 प्रतिक्रियाशील रूप पर नियंत्रण को निष्क्रिय करता हूं तो नियंत्रण को form.value में शामिल नहीं किया जाता है। उदाहरण के लिए, यदि मैं अपने फॉर्म को नीचे की तरह परिभाषित करता हूं:

this.notelinkingForm = new FormGroup({
    Enabled: new FormControl(settings.Enabled, Validators.required),
    LinkToPreceeding: new FormControl({value: settings.LinkToPreceeding, disabled: !settings.Enabled}, Validators.required),
    LinkingTolerance: new FormControl({value: settings.LinkingTolerance, disabled: !settings.Enabled}, Validators.required)
});

और यह चेक करें। रिमोट कंट्रोलफर्म.वेल्यू, यदि सभी नियंत्रण सक्षम हैं तो आउटपुट होगा:

{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"} 

हालाँकि, जब कुछ नियंत्रण अक्षम हो जाते हैं, तो यह होगा:

{"Enabled":true} 

ध्यान दें कि कैसे निष्क्रिय नियंत्रणों को बाहर रखा गया है।

मेरा आशय यह है कि जब फॉर्म बदलता है तो मैं फॉर्म को पास करने में सक्षम होना चाहता हूं। इसमें सभी गुणों के साथ मेरे बाकी एपीआई पर बंद करें। यह स्पष्ट रूप से संभव नहीं होगा यदि इसमें अक्षम आइटम शामिल नहीं हैं।

क्या मुझे यहाँ कुछ याद आ रहा है या यह अपेक्षित व्यवहार है? क्या अक्षम चीजों को फॉर्म में शामिल करने के लिए कोणीय को बताने का एक तरीका है।

आपके विचारों का स्वागत है।

जवाबों:


246

आप उपयोग कर सकते हैं:

this.notelinkingForm.getRawValue()

से डॉक्स :

यदि आप अक्षम स्थिति की परवाह किए बिना सभी मानों को शामिल करना चाहते हैं, तो इस पद्धति का उपयोग करें। अन्यथा, valueसंपत्ति समूह का मूल्य प्राप्त करने का सबसे अच्छा तरीका है।


41
आश्चर्य है कि पृथ्वी पर क्यों कोणीय टीम ने ऐसा किया
अकार्बनिक

@inorganik उन्होंने ऐसा इसलिए किया क्योंकि अक्षम नियंत्रण को सक्षम करना और इसके मूल्य को संपादित करना संभव है। इस मामले में getRawValue () छेड़छाड़ किए गए मान के साथ एक वस्तु लौटाएगा।
डेनिश

1
यह वास्तव में बहुत ही अच्छी चीज़ है। उदाहरण के लिए, मुझे पता है कि मेरे अक्षम नियंत्रणों के मूल्य नहीं बदलने वाले हैं इसलिए मैं उन्हें सेव एपीआई में शामिल नहीं करना चाहता क्योंकि मैंने उन नियंत्रणों को पहली जगह में डेटाबेस से एक मूल्य दिया था। लेकिन कुछ मामलों में, मैं वास्तव में उन नियंत्रणों को शामिल करना चाहता हूं जिनके सामने के छोर से असाइन किए गए मान हैं और वे डीबी में संग्रहीत नहीं हैं और यह फ़ंक्शन इसे कवर करता है। दोनों विकल्प रखना हमेशा अच्छा होता है।
चिरागएमएस

यह सच है @CiragMS। मैं उस पहलू को पसंद करता हूं जब तक कि मेरे पास एक विकल्प readonlyऔर है disabled। लेकिन यह उदाहरण के लिए चेकबॉक्स और रेडियो बटन के लिए ऐसा नहीं है जैसा कि मैंने नीचे दिए गए उत्तर में बताया है। उन मामलों में मुझे यह पसंद नहीं आया कि मुझे डेटा अलग से प्राप्त करना है और उस मामले के लिए विशेष रूप से कुछ कोड करना है।
सैंड्रो


7

मुझे 80% प्राप्त करने के लिए आपको @Sxx धन्यवाद, जिसकी मुझे आवश्यकता थी।

आप में से उन लोगों के लिए जो इस समस्या का हल ढूंढ रहे हैं लेकिन नेस्टेड रूपों के लिए मैं अपने सामान्य परिवर्तन को हल करने में सक्षम था

this.notelinkingForm.get('nestedForm').value

सेवा

this.notelinkingForm.getRawValue().nestedForm

0

यदि आप readonlyइसके बजाय उपयोग करते हैं, disabledतब भी यह संपादन योग्य नहीं है जबकि डेटा को प्रपत्र में शामिल किया जाएगा। लेकिन यह सभी मामलों में संभव नहीं है। उदाहरण के लिए, यह रेडियो बटन और चेकबॉक्स के लिए उपलब्ध नहीं है। MDN वेब डॉक्स देखें । उन मामलों में आपको यहां दिए गए अन्य समाधानों के लिए आवेदन करना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.