如何在Ionic 2中为FormArray控件设置初始值?

时间:2017-10-06 03:29:11

标签: angular typescript ionic-framework ionic2

我正在尝试向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社区!

1 个答案:

答案 0 :(得分:1)

这样做的简单方法是使用get方法,如:

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

如果使用controls属性,则它应如下所示:

((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