【问题标题】:How can I add formArray to a formGroup?如何将 formArray 添加到 formGroup?
【发布时间】:2019-06-29 11:30:42
【问题描述】:

首先为我的英语道歉。

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

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

当我搜索并阅读问题时,它在那里,但我无法解决它,请有人帮助我吗?

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

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

【问题讨论】:

标签: javascript angular typescript angular-reactive-forms


【解决方案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);
}

【讨论】:

  • 这个解决方案是最适合我的,也是我最了解的,非常感谢。即便如此,我在控制台“超出最大调用堆栈大小”中得到一个错误,根据错误的行是由 addField() 和添加字段时这两个错误:找不到路径控制:'servicesRates -> 1 -> service' 找不到路径控制:'servicesRates -> 1 -> price' 感谢一切
  • 你需要看到那个子组件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 2019-07-15
  • 2017-05-21
  • 1970-01-01
  • 2018-09-03
  • 2020-02-20
  • 2021-08-14
相关资源
最近更新 更多