2017-01-31 5 views
9

Próbuję push innego konstruktora w formarray, ale daje mi błąd, ponieważ myślę, że nie ma żadnych elementów w tablicy podczas inicjowania kodu, dlatego nie nie ma kontroli. Błąd jest „Kontrola” własność nie istnieje na typ „AbstractControl” poAngular2: Kontrolki właściwości "nie istnieją dla typu" AbstractControl ". Błąd podczas uzyskiwania dostępu. Kontrola obiektu w formarray przez indeks

(<FormArray>this.loanTypeForm.controls['frequency']).controls[index] 

Używam kątowej 2.0.0-beta.17

let settingsForm: FormArray = new FormArray([]); 
     (<FormArray>this.loanTypeForm.controls['frequency']).push(
     this.formBuilder.group({ 
      'name': [value, Validators.required], 
      'settings': settingsForm, 
     }) 
    ); 
(<FormArray>this.loanTypeForm.controls['frequency']).controls[index].controls['settings'].push(
     this.formBuilder.group({ 
     'term': [null, Validators.required], 
     'eir': [null, Validators.required], 
     }) 
    ); 

Odpowiedz

31

Można użyć ['controls'] zamiast .controls, jak poniżej:

(<FormArray>this.loanTypeForm.controls['frequency']).controls[index]['controls']['settings'].push(...) 

Jednak w celu uproszczenia i zapewnienia większej czytelności sugeruję, aby zmienić to wszystko na:

const control = this.loanTypeForm.get(`frequency.${index}.settings`) as FormArray; 
control.push(...); 
+1

to działało jak czar! Dziękuję Ci! – deckotonic

+0

@ user3764335 Cieszę się, że pomogło :) – developer033

2

Wydaje się, że jest traktowany loanTypeForm jak AbstractControl ... więc niech kompilator zapewniam, że jest FormGroup

var group = this.loanTypeForm as FormGroup; 
var array = group.controls['frequency'] as FormArray; 
var control = group.controls[index]; // AbstractControl again.. could be casted as needed 

aw przypadku, że kontr ol jest również grupa lub tworzą po prostu trzeba używać assert (CAST), jak również

var control = group.controls[index] as FormGroup 

I wtedy z łatwością możemy kontynuować

control.controls['settings']... 
+0

gdy próbuję uzyskać control.controls [ „Ustawienia”], ale mam „Nie można odczytać właściwość«kontroluje»undefined”. – deckotonic

+0

Poszerzyłem odpowiedź o kolejne stwierdzenie .. teraz spodziewamy się, że formantem jest FormArray .. i możemy powiedzieć, że do kompilacji (instrukcja 'as'). W przypadku, gdy jest to FormGroup (który kontroluje własność to słownik nie tablica) po prostu używalibyśmy jako FormGroup ... mam nadzieję, że to trochę pomaga;) –

2

get() jest preferowanym sposobem dostępu do formantów formularzy

this.loanTypeForm.get(`frequency.${index}.settings`) 
Powiązane problemy