我有一个很大的表格,里面有很多复选框,收音机,文本区域... 整个表单是从数据库动态生成的。
有时,我需要验证一组复选框,其中必须选中该复选框组中的至少一个复选框。 因此,我遵循了本手册:https://stackoverflow.com/a/54036689/11937089
我的问题是,表单组内的表单组必须动态生成。
我尝试过这样的事情:
this.outerForm.addControl('checkboxGroup' + (foo.id + ' ')), new FormGroup({}));
foo.forEach(bar => { get('checkboxGroup' + (foo.id + ' ')).addControl('checkbox'+ (foo.id + ' ') + (bar.id + ' ')), new FormControl(' ')); }
但是我很确定这是完全错误的,因为addControl不适用于表单组,而且我也不知道如何在addControl-Part中引用动态FormGroup checkboxGroup1,get
似乎是错误的。
outerform
--> textarea
--> checkboxGroup1
----->checkbox11
----->checkbox12
----->checkbox13
----->checkbox14
--> textarea
--> textarea
--> checkboxGroup2
----->checkbox21
----->checkbox22
----->checkbox23
----->checkbox24
答案 0 :(得分:0)
尝试使用 formArray 这样的东西 https://stackblitz.com/edit/angular-form-array-example
import { Component } from '@angular/core';
import { FormControl, FormGroup, FormArray, FormBuilder } from '@angular/forms';
@Component({
selector: 'my-app',
template: `
<form [formGroup]="form">
<input type="checkbox" formControlName="published"> Published
<div *ngIf="form.controls.published.value">
<h2>Credentials</h2>
<button (click)="addCreds()">Add</button>
<div formArrayName="credentials" *ngFor="let creds of form.controls.credentials?.value; let i = index">
<ng-container [formGroupName]="i">
<input placeholder="Username" formControlName="username">
<input placeholder="Password" formControlName="password">
</ng-container>
</div>
</div>
</form>
`,
})
export class AppComponent {
form: FormGroup;
constructor(private fb: FormBuilder) {
this.form = this.fb.group({
published: true,
credentials: this.fb.array([]),
});
}
addCreds() {
const creds = this.form.controls.credentials as FormArray;
creds.push(this.fb.group({
username: '',
password: '',
}));
}
}
答案 1 :(得分:0)
我自己解决了,我真的很近。
this.outerForm.addControl('checkboxGroup' + (foo.id + ' ')), new FormGroup({}));
效果很好。
get('checkboxGroup' + (foo.id + ' ')).addControl('checkbox'+ (foo.id + ' ') + (bar.id + ' ')), new FormControl(' '));
还不完整。
(this.outerForm.get('checkboxGroup' + (foo.id + ' ')) as any).addControl('checkbox'+ (foo.id + ' ') + (bar.id + ' ')), new FormControl(' '));
做到了。
答案 2 :(得分:0)
您可以使用@ angular / forms。因此,您可以使用FormGroup,FormArray,FormControl。 例如,请看看https://stackblitz.com/edit/angular-3x3tme?file=src/app/hello.component.ts