【问题标题】:How to set dynamic fields and it values in form如何在表单中设置动态字段及其值
【发布时间】:2020-05-27 04:29:31
【问题描述】:
  • 我正在使用角形控件。
  • 我有一组要在表单中显示的值,很少是静态的,很少是动态的。
  • 我正在使用 formControlName 和 ts 文件显示静态值 如下在 fb 组中接收。

对于已知值,我执行以下操作。

HTML 文件

<input type = "text" formControlName="catalogItemId">

Ts 文件

this.catalog Form = this.fb.group({
catalogItemId:fb.control('').
.
.
so on
})

对于动态值(未知值),我正在循环如下(因为我不知道这里会出现什么字段)。

<mat-list-item *ngFor="let data of attributeMap | keyvalue">
     <mat-form-field>
         <mat-label>{{data.key}}</mat-label>
         <input matInput type="text" value = {{data.value}}
     </mat-form-field>
</mat-list-item>

现在的问题是如何在我的表单组中获取这些动态值(即 this.catalog Form )

我以前没有使用过表单构建器,我正在查看许多文章以消除这个疑问。 希望有解决方案。在此先感谢。

【问题讨论】:

标签: angular angular-forms form-control angular-formbuilder


【解决方案1】:

您可以在表单上使用 addControl(),为其提供两个参数(控件的名称和创建的控件)。 由于您可能只想在模板中循环动态控件,因此我建议您在表单中创建一个嵌套表单组,以将其与表单的静态控件隔离。

this.catalogForm = this.fb.group({
 catalogItemId:fb.control(''),
 dynamicControls: this.fb.group({})
});
addDynamicValues() {
 for (let key in attributeMap) {
  (this.catalogForm.get('dynamicControls') as FormGroup).addControl(key, this.fb.control(attributeMap[key]))
  }
}

然后在模板中:

<form [formGroup]="catalogForm">
 <section formGroupName="dynamicControls">
  <ng-container *ngFor=let control of catalogForm.get('dynamicControls').controls | keyvalue">
   <mat-form-field>
    <mat-label>{{control.key}}</mat-label>
    <input matInput type="text" [formControlName]="control.key"
   </mat-form-field>
 </ng-container>
</section>
</form>

Working example on stackblitz

【讨论】:

  • 嗨@Gérôme Grignon,感谢您的回复,我已经完成了您给出的相同操作,我可以成功填充详细信息,但它们是修补值,我该如何为动态做值。
  • 我不太明白你的问题,请你重新表述一下好吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2016-02-06
  • 1970-01-01
  • 2013-10-29
  • 2020-08-21
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多