如何将formArray添加到formGroup?

时间:2019-06-29 11:30:42

标签: javascript angular typescript angular-reactive-forms

首先道歉我的英语。

尝试将数组字段添加到formGroup时遇到问题。

我正在尝试使用push方法将formArray添加到我的速率formGroup中,我认为该错误是由于formControlName引起的。

enter image description here

当我搜索并阅读问题所在时,但我无法解决它,有人可以帮我吗?

我创建了这个stackblitz,以便您可以看到它给我的错误。

https://stackblitz.com/edit/angular-mlk2mh

1 个答案:

答案 0 :(得分:1)

要使用FormArray,您需要了解以下内容:

                Need form group
                   \/\/\/
<form [formGroup]="rates">
    <input type="text" placeholder="credit_card" formControlName="credit_card" />
                       Need form array name
                          \/\/\/
    <div formArrayName="servicesRates" *ngFor="let item of rates.get('servicesRates').controls; let i = index;">
        <div [formGroupName]="i"> <-- this is important
            <input type="text" placeholder="id" formControlName="id" />
            <input type="text" placeholder="Servicio" formControlName="service" />
            <input type="text" placeholder="Price" formControlName="price" />
        </div>
    </div>
</form>

要在HTML之上工作,您的TS必须为:

rates: FormGroup;
servicesRates: FormArray;

this.rates = this._formBuilder.group({
  credit_card: [null, Validators.compose([Validators.required, Validators.minLength(8)])],
  servicesRates: this._formBuilder.array([
    this._formBuilder.group({
      id: 0,
      service: '',
      price: 0,
    })
  ])
});

和addNew函数:

addField() {
   this.servicesRates = this.rates.get('servicesRates') as FormArray;
   this.servicesRates.push(this.servicesRates);
}