【发布时间】:2018-02-02 21:04:33
【问题描述】:
我有几个像这样连接到 FormBuilder 的字段。
constructor(private builder: FormBuilder) {
this.form = builder.group({
"firstName": [...],
"lastName": [...]
});
}
在标记中,除了修复控件之外,我还会有未知数量的输入框。它从零开始并且可以增加,因为用户单击一个按钮,每次单击都会添加一个新的输入框。每个输入框还有一个删除按钮,因此它们的数量是完全动态的。
<div class="input-caption">FirstName</div>
<input type="text" formControlName="firstName">
<div class="input-caption">LastName</div>
<input type="text" formControlName="lastName">
<div id="options"></div>
<button (click)="addOption()">Add option</button>
由于动态添加的字段需要验证,我觉得需要在组定义中声明。不过,我不知道怎么做。
当我在谷歌上搜索时,我在[(ngModel)] 上获得了很多点击,但我还读到它应该与FormsModule 一起使用,而不是ReactiveFormsModule,正如a blog 中所讨论的那样。
我应该如何处理它?双重绑定 ngModel 是唯一的选择吗?
编辑根据答案。
HTML
<div *ngFor="let tag of []; let i = index;" [formGroupName]="i">
<div class="input-caption">Tag</div>
<input formControlName="name"> -->
</div>
TS
constructor(private builder: FormBuilder) {
this.form = builder.group({
"firstName": [...],
"lastName": [...],
"tags": this.builder.array([]),
});
}
addTag(): void {
(this.form.controls.tags as FormArray).???;
}
我还尝试在标记中指定一个硬编码数组,如下所示,但没有看到任何正在呈现的控件。
<div *ngFor="let tag of [{'name':'uno'},{'name':'duo'}]; let i = index;"
[formGroupName]="i">
<div class="input-caption">Tag</div>
<input formControlName="name"> -->
</div>
【问题讨论】:
标签: html forms angular validation typescript