2017-07-18 12 views
5

मैं कोणीय 2 अनुप्रयोग पर काम कर रहा हूं और कोणीय प्रतिक्रियाशील रूपों का उपयोग कर रहा हूं। innermost तत्व का मूल्य कैसे प्राप्त करें और इसका मूल्य निर्धारित करें।angular2 में नेस्टेड फॉर्म फ़ील्ड्स में मूल्य कैसे प्राप्त करें और सेट करें?

form : FormGroup; 

constructor(private formBuilder: FormBuilder) 
{ 
    this.form = formBuilder.group({ 
     'home_cleaning' : [{ 
      cities : FormBuilder.array([]) 
     }] 
    }); 
} 

setValue() 
{ 
    let cities_array = [1,2,3,4]; 
    this.form.controls['home_cleaning']['cities'].setValue(cities_array); 
} 

getValue() 
{ 
    console.log(this.form.controls['home_cleaning']['cities'].value); 
} 

कंसोल में त्रुटि प्राप्त करना: अपरिभाषित की संपत्ति 'सेट वैल्यू/मान' नहीं पढ़ सकता।

+0

प्रयास करें हो सकता है आप में कोई गलती है 'setVlaue' ->' setValue' –

उत्तर

0

इस प्रयास करें:

setValue() { 
    let cities_array = [1, 2, 3, 4]; 
    this.form = this.formBuilder.group({ 
     home_cleaning: this.formBuilder.array([ 
      [({ 
       cities: cities_array, 

      })], 
     ]), 
    }); 
} 
1

आप डेटा के साथ अपने फार्म को भरने के लिए चाहते हैं, तो आप इसे

this.form.patchValue(dataObject); 

या

this.form.patchValue({ 
    'home_cleaning': { cities: 'value' } 
}); 

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

आप वस्तु विलय कर सकते हैं

this.form.patchValue(Object.assign(this.form.value, youNewDataObject))); 

या

this.form.patchValue(dataObj, {selfOnly: true }); 
+0

मैं इस को लागू किया है लेकिन एक समस्या हो रही है कि यदि मेरे पास home_cleaning फ़ील्ड में एक फ़ील्ड है तो पैच मान सभी फ़ील्ड लिखने पर होगा। –

+0

मैंने अपना एस्वर अपडेट किया है –

0

तक टिप्पणियां ऐसा लगता है कि आप बस अपने प्रपत्र सरणी के लिए नए मूल्यों को पुश करने के लिए है, तो सिर्फ उस के लिए map का उपयोग करते हैं चाहते हैं, और नए फॉर्म नियंत्रण को दबाएं:

setValue() { 
    let cities_array = [1,2,3,4]; 
    let arr = this.form.get('home_cleaning.cities').controls; 
    cities_array.map(city => arr.push(new FormControl(city))) 
} 

पीएस। यहां मुझे लगता है कि आपके पास टाइपो है, और home_cleaning वास्तव में एक नेस्टेड फॉर्म समूह है।

और मूल्य प्राप्त करने के लिए, बस कार्य करें:

this.form.get('home_cleaning.cities').value 
0

इस जवाब

form: FormGroup; 

constructor(private formBuilder: FormBuilder) { 
    this.form = formBuilder.group({ 
     'home_cleaning': formBuilder.group({ 
     cities: [] //if you want to set values as normal array if you want to create FormArray use new FormArray([]) and push formCotrols in this array. 
     }) 
    }); 
} 

setValue() { 
    let cities_array = [1, 2, 3, 4]; 
    this.form.get(['home_cleaning','cities']).setValue(cities_array); 
} 

getValue() { 
    console.log(this.form.get(['home_cleaning','cities']).value); 
} 
संबंधित मुद्दे