使用し、角度の反応形式は+ネストされたFormGroups
:ページがロードされたときhttps://angular.io/guide/reactive-forms#nested-formgroups一般に
、フォームは、3つのグループ(「フォーム」あたり1)を持っている必要があります。 宣言フォームとして:だから最後にあなたが(任意のネストされたフォームグループからの任意のフィールドが無効である場合、それはfalse
になります)検証ステータスを取得するには、親フォームを使用することができ、ボタンを提出するための
this.form = this.fb.group({
subForm1: this.fb.group({
subForm1_field1: ['', Validators.required ],
subForm1_field2: ['', Validators.required, Validators.min(5) ],
}),
subForm2: this.fb.group({
subForm2_field1: '',
subForm2_field2: ['', Validators.required, Validators.max(10) ],
}),
subForm3: this.fb.group({
subForm3_field1: '',
})
});
。 HTMLコード:
<input type="checkbox" (ngModel)="onShowSubForm3()"/><label>Show Form3</label>
<form [formGroup]="form">
<div class="form-horizontal"><!-- your inputs goes here for subForm1 --></div>
<div class="form-horizontal"><!-- your inputs goes here for subForm2 --></div>
<div class="form-horizontal" *ngIf="showSubForm3"><!-- your inputs goes here for subForm3 --></div>
</form>
<button type="button" (click)="submitSubForm1()" [disabled]="!form.get("subForm3").valid">Send 1</button> <!-- is disabled only if any field from `subForm3` is invalid -->
<button type="button" (click)="submitAllForms()" [disabled]="!form.valid">Send All</button> <!-- is disabled if any field is invalid -->
コード1つのサブフォームの送信/フォームを送信する:
submitAllForms(){
let formValue = this.form.value();
/*formValue = {
subForm1: {
subForm1_field1: "val1-1",
subForm1_field2: "val1-2",
},
subForm2: {
subForm2_field1: "val2-1",
subForm2_field2: "val2-2",
},
};*/
this.http.post("/url", {data: formValue});
}
submitSubForm1(){
let subForm1Value = this.form.get["subForm1"].value;
/*subForm1Value = {
subForm1_field1: "val1-1",
subForm1_field2: "val1-2",
};*/
this.http.post("/url", {data: subForm1Value});
}
あなたが新しいサブフォームを表示/非表示する必要があるたびに - 更新this.form
(あなたはすべてのフィールドを保存することもできますが、更新Validators
のみ)。
showSubForm3: boolean = false;
onShowSubForm3(value){
this.showSubForm3 = value;
//THIS CODE CAN BE OPTIMIZED TO UPDATE ENTIRE `FormGroup` WITH NEW VALIDATORS
let field = this.form.controls["subForm3.subForm3_field1"];
if(value){
field.setValidators(Validators.compose([Validators.required]));
}else{
field.setValidators(Validators.compose([]));
}
field.updateValueAndValidity();
}
コードで説明してください。 –
答えを更新しました... –