首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角5 FormArray

角5 FormArray
EN

Stack Overflow用户
提问于 2018-03-02 13:12:12
回答 4查看 7.3K关注 0票数 3

我在我的角5/角材料的应用中有这个FormArray:

代码语言:javascript
复制
this.form = new FormGroup({    
    customerNumberContainers: new FormArray([
      new FormGroup({
        contactTenant: new FormControl('', [Validators.required, Validators.minLength(2)]),
        customerNumber: new FormControl('', [Validators.required, Validators.minLength(2)])
        }),
    ]),
...

实际上,我不知道如何运行这个FormArray。我试过这个

代码语言:javascript
复制
<form [formGroup]="form" (ngSubmit)="onSubmit()">
    <div formGroupName="customerNumberContainers">          
        <div *ngFor="let customerNumberContainer of form.controls['customerNumberContainers']; index as i">
            <mat-input-container class="full-width-input" style="min-width:100px;">
                 <input matInput placeholder="Tenant" formControlName="customerNumberContainer[i].contactTenant">
            </mat-input-container> 
            <mat-input-container class="full-width-input" style="min-width:100px;">
                 <input matInput placeholder="Customernumber" formControlName="customerNumberContainer[i].customerNumber">
            </mat-input-container> 
        </div>
    </div>
   ...
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-03-02 13:25:23

实际上,你应该怎么做是这样的:

有一个返回控件数组的方法。

代码语言:javascript
复制
get customerNumberContainers(): FormArray {
    return this.form.get("customerNumberContainers") as FormArray;
    } 

您将使用变量i来管理数组中的窗体组。

代码语言:javascript
复制
<form [formGroup]="form" (ngSubmit)="onSubmit()">
<div formArrayName="customerNumberContainers">          
    <div *ngFor="let customerNumberContainer of customerNumberContainers.controls; index as i" [formGroupName]="i">
        <mat-input-container class="full-width-input" style="min-width:100px;">
             <input matInput placeholder="Tenant" formControlName="contactTenant">
        </mat-input-container> 
        <mat-input-container class="full-width-input" style="min-width:100px;">
             <input matInput placeholder="Customernumber" formControlName="customerNumber">
        </mat-input-container> 
    </div>
</div>

..。

您可以创建add方法和delete方法来管理数组中的表单组。

代码语言:javascript
复制
add(data?: any) {
   /// data is to set up values to your internal form (useful for edition)
        this.customerNumberContainers.push(this.fb.group({
         }))
    }

    remove(index: number) {
        this.customerNumberContainers.removeAt(index)
    }

我希望这对你有帮助

问候

票数 5
EN

Stack Overflow用户

发布于 2018-03-02 13:41:44

改变你的

代码语言:javascript
复制
<div *ngFor="let customerNumberContainer of form.controls['customerNumberContainers']; index as i">

至:

代码语言:javascript
复制
<div *ngFor="let item of getControls(); let i = index">

并在您的.ts文件中添加:

代码语言:javascript
复制
getControls() {    
 const fa = this.form.get('customerNumberContainers') as FormArray;  return 
 fa.controls; 
}

最终结果应是:

代码语言:javascript
复制
<form [formGroup]="form" (ngSubmit)="onSubmit()">
    <div formArrayName="customerNumberContainers">          
        <div *ngFor="let item of getControls(); let i = index">
           <div [formGroupName]="i">
            <mat-input-container class="full-width-input" style="min-
               width:100px;">
                 <input matInput placeholder="Tenant" formControlName="contactTenant">
            </mat-input-container> 
            <mat-input-container class="full-width-input" style="min-width:100px;">
                 <input matInput placeholder="Customernumber" formControlName="customerNumber">
            </mat-input-container> 
        </div>
    </div>...

希望这会有所帮助:)

票数 1
EN

Stack Overflow用户

发布于 2018-03-02 13:46:43

看一下工作演示

StackBlitz:演示

解释:

  1. 有相当多的事情需要在角度上与Form一起工作。请参阅Aligator.io博客文章。
  2. 如果没有方括号:formControlName="value",则值表示为字符串。
  3. 当使用方括号:[formControlName]="customerNumberContainer[i].contactTenant"时,则接受变量。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49069837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档