angular 4 material 使用 ngFor 和 ngModel 显示 formArrayName
angular 4 material show formArrayName with ngFor and ngModel
我正在尝试用 Angular 4 反应形式显示一组电子邮件,并从我的输入中绑定一个数组,所以在组件中我这样写:
<li>
<h4>Telephone</h4>
<div class="lists" formArrayName="telephones">
<mat-form-field *ngFor="let telephone of userData.telephones; let i = index">
<input matInput [(ngModel)]="telephone">
</mat-form-field>
</div>
</li>
我需要显示一个电话号码数组,并且我想让它的字段可以使用 ngModel 进行编辑。
我已经尝试了很多东西:
一个带有 [formGroupName]="index" 和 formControlName="" 的 formArrayName 解决方案,但它没有用。
还有一个带有 ngFor 解决方案的 ngModel 需要一个唯一的名称。
不要将响应式表单与模板驱动混合使用。选择其中一个。由于您使用的是数组,因此请使用反应形式。似乎您的数组是原始类型,这意味着您可以直接分配值而无需循环数组。
constructor(private fb: FormBuilder) {
this.myForm = this.fb.group({
telephones: this.fb.array(this.userData.telephones)
});
// if receiving data at a later point, use below instead
//this.myForm.setControl('telephones', this.fb.array(this.userData.telephones))
}
然后在你的模板中迭代你的表单数组(这里没有 angular material):
<div formArrayName="telephones">
<div *ngFor="let tel of myForm.controls.telephones.controls; let i = index">
<input [formControlName]="i" />
</div>
</div>
我正在尝试用 Angular 4 反应形式显示一组电子邮件,并从我的输入中绑定一个数组,所以在组件中我这样写:
<li>
<h4>Telephone</h4>
<div class="lists" formArrayName="telephones">
<mat-form-field *ngFor="let telephone of userData.telephones; let i = index">
<input matInput [(ngModel)]="telephone">
</mat-form-field>
</div>
</li>
我需要显示一个电话号码数组,并且我想让它的字段可以使用 ngModel 进行编辑。
我已经尝试了很多东西: 一个带有 [formGroupName]="index" 和 formControlName="" 的 formArrayName 解决方案,但它没有用。 还有一个带有 ngFor 解决方案的 ngModel 需要一个唯一的名称。
不要将响应式表单与模板驱动混合使用。选择其中一个。由于您使用的是数组,因此请使用反应形式。似乎您的数组是原始类型,这意味着您可以直接分配值而无需循环数组。
constructor(private fb: FormBuilder) {
this.myForm = this.fb.group({
telephones: this.fb.array(this.userData.telephones)
});
// if receiving data at a later point, use below instead
//this.myForm.setControl('telephones', this.fb.array(this.userData.telephones))
}
然后在你的模板中迭代你的表单数组(这里没有 angular material):
<div formArrayName="telephones">
<div *ngFor="let tel of myForm.controls.telephones.controls; let i = index">
<input [formControlName]="i" />
</div>
</div>