【发布时间】:2018-01-21 08:15:33
【问题描述】:
我正在使用 Angular 4 反应式创建嵌套表单。我的表单结构如下所示
表单组(用户表单)
FormArray(用户)
FormGroup(idx)
在完整的 table 中,位于 Form Group 下,每个 table 行 位于 FormArray(users) 下,每个表格数据单元格位于 Formgroup(idx) 下。
错误:
appComponent.html:20 ERROR Error: Cannot find control with path: 'users -> 0 -> '
HTML:
<form [formGroup]="userForm" (ngSubmit)="onFormSubmit()">
<tbody formArrayName="users">
<tr *ngFor="let user of users.controls; index as idx">
<div [formGroupName]="idx">
<td>
<div class="mdl-select mdl-js-select mdl-select--floating-label">
<select class="mdl-select__input" id="projectname{{i}}" name="projectname{{i}}" [formControlName]="projectname">
<option *ngFor="let project of projects;let first=first;let last:last">{{project.projectname}}</option>
</select>
<label class="mdl-select__label" for="professsion">Select Project Name</label>
</div>
</td>
<td>
<div class="mdl-textfield mdl-js-textfield">
<input class="mdl-textfield__input" type="text" pattern="[0-9]*" id="sunday{{i}}" name="sunday{{i}}" [formControlName]="sunday">
<span class="mdl-textfield__error">Digits only</span>
</div>
</td>
</tr>
</table>
</form>
TS:
export class appComponent implements OnInit {
ngOnInit() {
}
userForm = new FormGroup({
users: new FormArray([
new FormControl()
])
});
get userName(): any {
return this.userForm.get('name');
}
onFormSubmit(): void {
this.logData();
}
get users(): FormArray {
return this.userForm.get('users') as FormArray;
}
addUserField() {
this.users.push(new FormControl());
}
deleteUserField(index: number) {
this.users.removeAt(index);
}
logData(){
for(let i = 0; i < this.users.length; i++) {
console.log(this.users.at(i).value);
}
}
}
【问题讨论】:
-
快速查看您的代码,我们至少可以确定您正在尝试在模板中显示一个名为
projectname的表单控件,即使您的表单中没有这样的表单控件:) 同样适用表单控件sunday. -
为 formcontrol 提供索引值,我只得到最后一个输入表数据输入元素
-
我不太明白这个评论。但是不管怎样,template中的表单控件必须匹配form中的表单控件,而现在不匹配。
标签: angular angular2-template angular2-forms angular-reactive-forms angular4-forms