Forms 如何用Angular2中的数据数组填充表单?

Forms 如何用Angular2中的数据数组填充表单?,forms,angular,angular2-formbuilder,formarray,Forms,Angular,Angular2 Formbuilder,Formarray,下面的问题帮助我从formbuilder数组中设置formbuilder、适当的验证和一组动态输入字段 请注意此解决方案代码 在一个新表单上,一切都很好,但当我试图从数据库填充所述表单时,我会陷入困境 我正在使用以下代码,initialValue在以前的交易中保存了多封来自此表单的电子邮件。我所有的其他表单字段都工作得很好。我只是不知道如何操作阵列 ngOnChanges(changes: SimpleChanges): void { if(this.form && cha

下面的问题帮助我从formbuilder数组中设置formbuilder、适当的验证和一组动态输入字段

请注意此解决方案代码

在一个新表单上,一切都很好,但当我试图从数据库填充所述表单时,我会陷入困境

我正在使用以下代码,initialValue在以前的交易中保存了多封来自此表单的电子邮件。我所有的其他表单字段都工作得很好。我只是不知道如何操作阵列

ngOnChanges(changes: SimpleChanges): void {
  if(this.form && changes['initialValue']){
    this.emails = changes['initialValue'].currentValue.emails;
    this.form.patchValue(changes['initialValue'].currentValue);
    //console.log('emails are now', this.emails);
    //this.emailCtrl = this.fb.array([], Validators.minLength(1));
    //this.emails.forEach((email: any) => this.addEmail(email));
  }
}
如果我保留这些行的注释,那么只有数组中的第一封电子邮件在表单中正确显示

如果我取消对行的注释并尝试刷新电子邮件,请使用新的电子邮件列表。我得到以下错误

ERROR Error: Cannot find control with path: 'emails -> 1 -> email'
at _throwError (forms.js:2385)
at setUpControl (forms.js:2255)
at FormGroupDirective.addControl (forms.js:6606)
at FormControlName._setUpControl (forms.js:7256)
at FormControlName.ngOnChanges (forms.js:7169)
at checkAndUpdateDirectiveInline (core.js:12092)
at checkAndUpdateNodeInline (core.js:13598)
at checkAndUpdateNode (core.js:13541)
at debugCheckAndUpdateNode (core.js:14413)
at debugCheckDirectivesFn (core.js:14354)
格式数组应该是
this.emailsCtrl
,而不是
this.emailCtrl
formArrayName是电子邮件,formControlName是电子邮件

您可以根据名称访问它:

  this.emailsCtrl = this.form.get('emails') as FormArray;
  this.emails.forEach(email => this.addEmail(email));

哦,我喜欢编程。那么,我如何在出发前先清空它呢?它当前正在重复第一封电子邮件。您可以使用
removeAt(index)
从FormarayTank You中删除项目。我感谢你的帮助
  this.emailsCtrl = this.form.get('emails') as FormArray;
  this.emails.forEach(email => this.addEmail(email));