2017-10-06 79 views
0

我想將一個初始值添加到FormArray控件。我正在使用此代碼:如何將初始值設置爲Ionic 2中的FormArray控件?

if(this.navParams.get('kids').length > 1) { 
     for(let i=0; i<this.navParams.get('kids').length - 1; i++) { 
      this.addChild(); 
     } 
     for(let i=0; i<this.navParams.get('kids').length; i++) { 
      this.registrationForm.controls['child'][i]['child_first_name'].setValue("asdasdasd"); 
     } 
    } 

但是,我想我錯誤地使用了setValue方法。 我有此錯誤:

Error

這裏是的addChild代碼:

addChild() { 
    // add child to the list 
    const control = <FormArray>this.registrationForm.controls['child']; 
    control.push(this.initChild()); 
    // console.log(this.registrationForm.value); 
} 

這裏是initChild方法:

initChild() { 
    // initialize child form 
    return this.formBuilder.group({ 
     child_first_name: ['', Validators.compose([Validators.maxLength(255), Validators.required])], 
     child_last_name: ['', Validators.compose([Validators.maxLength(255), Validators.required])], 
     child_gender: ['', Validators.compose([Validators.required])], 
     child_bdate: ['', Validators.compose([Validators.required])] 
    }); 
} 

我發現一個解決方案一樣差不多2天。這是我第一次使用Ionic。任何幫助,將不勝感激。謝謝,SO社區!

+0

你可以添加addChild方法的代碼嗎? – yurzui

+0

編輯了這個問題,我添加了addCHild和initChild方法。謝謝! –

回答

1

使用get方法像這樣做的簡單的方法:

this.registrationForm.get(['child', i, 'child_first_name']).setValue('asdasdasd'); 

如果您使用的控制屬性,那麼它應該如下所示:

((this.registrationForm.controls['child'] as FormArray).controls[i] as FormGroup).controls['child_first_name'].setValue("asdasdasd"); 

一個比較另類的可能看起來像:

this.registrationForm.patchValue({ 
    child: [...Array(i), { child_first_name: 'asdasdasd' }] 
}); 

Stackblitz Example

+0

哇!非常感謝你@yurzui :)你整個一週都保存完好!哈哈! :d –

相關問題