2017-07-18 4 views
5

Pracuję nad aplikacją kątową2 i wykorzystaniem kątowych form reaktywnych. Jak uzyskać wartość najskrytszego elementu i ustawić jego wartość.Jak uzyskać i ustawić wartość w zagnieżdżonych polach formularza w angle2?

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

Błąd w konsoli: Nie można odczytać właściwości "setValue/value" z undefined.

+0

Może masz literówkę w 'setVlaue' ->' setValue' –

Odpowiedz

0

Spróbuj tego:

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

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

Jeśli chcesz, aby wypełnić formularz z danymi, trzeba załatać to

this.form.patchValue(dataObject); 

lub

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

Z patchValue , możesz przypisać wartości do określonych formantów w grupie Form poprzez dostarczenie obiektu par klucz/wartość tylko dla interesujących formantów.

można scalić obiekt

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

lub

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

I wprowadziły ten ale otrzymuję jeden problem, że jeśli mam więcej niż jedno pole w polu home_cleaning, to wartość poprawki spowoduje nadpisanie wszystkich pól. –

+0

Zaktualizowałem mój asnwer –

0

wypowiedzi wydaje się, że chcesz po prostu wcisnąć nowe wartości do formularza Array, to niech po prostu użyć map za to, i wypchnij nowe formanty:

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. Tutaj zakładam, że masz literówkę i że home_cleaning jest w rzeczywistości zagnieżdżoną grupą formularzy.

A dla uzyskania wartości, po prostu zrobić:

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

Spróbuj odpowiedź

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); 
} 
Powiązane problemy