我在* ngIf下有模板,它只在表单加载后生成。另外,我在动态显示的字段下有失败的表单,这取决于按下按钮。我注销表单,它返回正确缺少的FormControl。
模板:
<div *ngIf="ready">
<form [formGroup]="form">
<div [formGroup]="form.controls.request">
<div *ngFor="let field of inputFields">
...
</div>
</div>
<div *ngIf="somethingEnabled">
<div [formGroup]="form.controls.Something">
<div class="input-container">
<label>Name: </label>
<input formControlName="Name">
</div>
<div [formGroup]="form.controls.Something.Organization">
<div class="input-container">
<label>ASD: </label>
<input formControlName="ASD">
</div>
<div [formGroup]="form.controls.Something.Organization.Other">
<div class="input-container">
<label>Id: </label>
<input formControlName="Id">
</div>
<div [formGroup]="form.controls.Something.Organization.Other.SchmeNm">
<div class="input-container">
<label>SchmeName: </label>
<input formControlName="SchmeName">
</div>
<div class="input-container">
<label>SchmeValue: </label>
<input formControlName="SchmeValue">
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
代码:
generateForm() {
this.form = this.fb.group({
request: this.fb.group(
this.generateRequestFields())
,
Something: this.fb.group(this.generateSomething()),
address: this.fb.group(
this.generateAddress()
)
});
}
generateSomething() {
const returnObject = {};
returnObject['Name'] = new FormControl();
returnObject['Organization'] = this.fb.group(this.generateOrganization());
return returnObject;
}
generateOrganization() {
const returnObject = {};
returnObject['ASD'] = new FormControl();
returnObject['Other'] = this.fb.group({
Id: new FormControl(),
Schme: this.fb.group({
SchmeName: new FormControl(),
ShcmeValue: new FormControl()
}),
Issr: new FormControl()
});
return returnObject;
}
我只在激活 form.controls.something 部分时遇到错误。 如果我删除 form.controls.Something.Organization 部分模板,它可以正常工作。
错误: 错误错误:formGroup需要一个FormGroup实例。请通过一个。
我可能刚刚错过了一些东西,并希望我会在发布此内容时找到它,但似乎仍然无法得到它
答案 0 :(得分:1)
对于嵌套formGroup,请使用formGroupName
而不是formGroup
。
答案 1 :(得分:0)
当您进入formGroup时,您不需要访问父窗体的控件来定义它的子窗体组,您只需使用名称
<form [formGroup]="form">
<div [formGroup]="request">
<div *ngFor="let field of inputFields">
...
</div>
答案 2 :(得分:0)
如果您console.log(this.form.controls.Something.Organization)
可能还会返回未定义。对于添加的每个FormGroup,您必须先访问其控件,然后再进入下一级,如:
<div [formGroup]="form.controls.Something.controls.Organization">
...
<div [formGroup]="form.controls.Something.controls.Organization.controls.Other">
...
尝试一下。如果它不起作用(无法访问Something
),请尝试:
<div [formGroup]="form.get("Something").get("Organization")">
form.controls
将浏览您定义的确切路径,而form.get
将转到您指定的确切控件,使其对多层表单有用,从而易于维护和阅读。
让我们知道您会得到什么。