FormArray return 为空?
FormArray return null?
您好。我尝试了多种方法,但其中 none 行得通。我正在处理这个,现在。我需要启动一个 formArray of emails
email: [testestest]
但是我得到了:
email: [testestest]
但是我的电子邮件 return n 点击。检查我的 ts
还有我的html:
Alex,您有一个 FormControl 的表单数组,而不是 formGroup 的表单数组。所以你 .html 一定是这样的
<form *ngIf="addForm" [formGroup]="addForm">
<div class="form-control-row" formArrayName="email"
*ngFor="let item of addForm.get('email').controls; let i = index;">
<div class="input-box">
<input type="text" placeholder="E - mail" [formControlName]="i">
<img src="../../assets/Delete.svg" alt="x-icon">
</div>
</div>
</form>
看到你没有[fomGroupName]="i",你用的是[formControlName]="i"
另一种方式是
<form *ngIf="addForm" [formGroup]="addForm">
<div class="form-control-row" formArrayName="email"
*ngFor="let item of addForm.get('email').controls; let i = index;">
<div class="input-box">
<input type="text" placeholder="E - mail" [formControl]="item">
<img src="../../assets/Delete.svg" alt="x-icon">
</div>
</div>
</form>
请注意,在这种情况下我们使用 [formControl]="item"(item 是您在
*ngFor)
那么,如何创建 formArray?
如果您有一系列电子邮件,您可以这样做
email: this.formBuilder.array(
this.email.map(x=>this.formBuilder.control(x))
)
那就是你使用 map 创建一个 FormControls 数组(将数组的每个元素转换到一个 FormControl 中,FormControl 为数组的元素赋值。
注意:在生产中你需要为数组
创建一个getter
get emails()
{
return this.form.get('email') as FormArray;
}
并迭代
*ngFor="let item of emails.controls; let i = index;">
使用 [formGroupName]="i" 和 formControl 它与 FormGroups 的 FormArray 一起使用。例如你可以有
email: this.formBuilder.array(
this.email.map(x=>this.formBuilder.group({email:x}))
)
请注意,在这种情况下,将数组的每个元素转换为具有 FormControl "called" 电子邮件
的 formGroup
你可以在stackblitz中看到这一切。我希望这个例子能帮助你理解差异
如果我们想向 formArray 添加一个元素,我们可以创建一个函数
addEmail(email:any)
{
const array=this.addForm.get('email') as FormArray
array.push(this.formBuilder.control(email)) //if is a FormArray of FormControl
const array2=this.addForm.get('email2') as FormArray
array2.push(this.formBuilder.group({email:email})) //if is a FormArray of FormGroup
}
注意:首先,如果我们想创建一个空的 formArray,我们需要使用
email: this.formBuilder.array([])
当我们要删除数组的一个元素时,需要传入数组的"index",所以我们的函数delete是
delete(index:number)
{
const array=this.addForm.get('email') as FormArray
array.removeAt(index)
}
而我们的 .html 是
<div class="input-box">
<input type="text" placeholder="E - mail" [formControl]="item">
<img src="../../assets/Delete.svg" alt="x-icon" (click)="delete(i)">
</div>
您好。我尝试了多种方法,但其中 none 行得通。我正在处理这个,现在。我需要启动一个 formArray of emails
email: [testestest]
但是我得到了:
email: [testestest]
但是我的电子邮件 return n 点击。检查我的 ts
还有我的html:
Alex,您有一个 FormControl 的表单数组,而不是 formGroup 的表单数组。所以你 .html 一定是这样的
<form *ngIf="addForm" [formGroup]="addForm">
<div class="form-control-row" formArrayName="email"
*ngFor="let item of addForm.get('email').controls; let i = index;">
<div class="input-box">
<input type="text" placeholder="E - mail" [formControlName]="i">
<img src="../../assets/Delete.svg" alt="x-icon">
</div>
</div>
</form>
看到你没有[fomGroupName]="i",你用的是[formControlName]="i"
另一种方式是
<form *ngIf="addForm" [formGroup]="addForm">
<div class="form-control-row" formArrayName="email"
*ngFor="let item of addForm.get('email').controls; let i = index;">
<div class="input-box">
<input type="text" placeholder="E - mail" [formControl]="item">
<img src="../../assets/Delete.svg" alt="x-icon">
</div>
</div>
</form>
请注意,在这种情况下我们使用 [formControl]="item"(item 是您在 *ngFor)
那么,如何创建 formArray?
如果您有一系列电子邮件,您可以这样做
email: this.formBuilder.array(
this.email.map(x=>this.formBuilder.control(x))
)
那就是你使用 map 创建一个 FormControls 数组(将数组的每个元素转换到一个 FormControl 中,FormControl 为数组的元素赋值。
注意:在生产中你需要为数组
创建一个getterget emails()
{
return this.form.get('email') as FormArray;
}
并迭代
*ngFor="let item of emails.controls; let i = index;">
使用 [formGroupName]="i" 和 formControl 它与 FormGroups 的 FormArray 一起使用。例如你可以有
email: this.formBuilder.array(
this.email.map(x=>this.formBuilder.group({email:x}))
)
请注意,在这种情况下,将数组的每个元素转换为具有 FormControl "called" 电子邮件
的 formGroup你可以在stackblitz中看到这一切。我希望这个例子能帮助你理解差异
如果我们想向 formArray 添加一个元素,我们可以创建一个函数
addEmail(email:any)
{
const array=this.addForm.get('email') as FormArray
array.push(this.formBuilder.control(email)) //if is a FormArray of FormControl
const array2=this.addForm.get('email2') as FormArray
array2.push(this.formBuilder.group({email:email})) //if is a FormArray of FormGroup
}
注意:首先,如果我们想创建一个空的 formArray,我们需要使用
email: this.formBuilder.array([])
当我们要删除数组的一个元素时,需要传入数组的"index",所以我们的函数delete是
delete(index:number)
{
const array=this.addForm.get('email') as FormArray
array.removeAt(index)
}
而我们的 .html 是
<div class="input-box">
<input type="text" placeholder="E - mail" [formControl]="item">
<img src="../../assets/Delete.svg" alt="x-icon" (click)="delete(i)">
</div>