2017-07-18 28 views
5

Açısal2 uygulama üzerinde ve açısal reaktif formları kullanarak çalışıyorum. En içteki öğenin değeri nasıl alınır ve değeri ayarlanır.İç içe geçmiş form alanlarında angular2'de değer nasıl alınır ve ayarlanır?

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); 
} 

Konsolda hata alma: Tanımlanmamış 'propertyValue/value' özelliği okunamıyor.

+0

deneyin 'setVlaue' ->' Bunu uygulayan –

cevap

0

bu deneyin:

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

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

Eğer verilerle formunuzu doldurmak istiyorsanız, patchValue ile o

this.form.patchValue(dataObject); 

veya

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

yama zorunda , Yalnızca belirli denetimler için anahtar/değer çiftleri nesnesi sağlayarak bir FormGroup içindeki belirli denetimlere değerler atayabilirsiniz.

bunu sadece o zaman, formunuz Dizisine yeni değerler itmek Sadece bunun için map kullanmasına izin istiyorum gibi görünüyor yorumların By

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

veya

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

setValue' ama bir sorunla karşılaşıyorum, eğer home_cleaning alanında daha fazla alanım varsa, yama değeri tüm alanları yazacaktır. –

+0

Asnwer'ı güncelledim –

0

nesneyi birleştirmek ve edebilirsiniz yeni form denetimlerini itmek:

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))) 
} 

PS. Burada yazım hatası olduğunu ve home_cleaning aslında yuvalanmış bir form grubu olduğunu varsayalım.

Ve değerini almak için

, sadece yapın:

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

Eğer bir yazım hatası var olabilir bu cevabı

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); 
}