【Angular】 중첩된 formGroup을 초기화하는 방법
9916 단어 Angular
이 기사 개요
중첩 된 폼 그룹의 유효성 검사 설정은 그대로 값을 초기화하고 싶을 때 폼 그룹의 항목이 많을 경우 하나 하나 patchValue 해가는 것은 어렵습니다.
그래서 중첩 양식 그룹의 초기 설정을 제거하고 setControl을 사용하여 초기화합니다.
구현
parentForm: FormGroup;
get fCtrl(): { [key: string]: AbstractControl } {
return this.parentForm.controls;
}
get fChildCtrl(): { [key: string]: AbstractControl } {
return (this.parentForm.controls.childGroup as FormGroup).controls;
}
constructor(
private fb: FormBuilder
) { }
ngOnInit() {
this.parentForm = this.fb.group({
id: [null],
parentName: [null, [Validators.required]],
childGroup: this.getDefaultChildForm()
}, {
updateOn: 'submit'
});
}
/**
* 子フォームグループの初期値取得.
*/
private getDefaultChildForm(): FormGroup {
return this.fb.group({
childName: [null, [Validators.required]],
childCount: [null, [Validators.required]]
});
}
/**
* 子フォームグループを初期値する.
*/
onInitChildForm(): void {
this.parentForm.setControl('childGroup', this.getDefaultChildForm());
}
onSubmit(): void {
if (this.parentForm.invalid) {
alert('invalid!');
return;
}
// submit処理
}
<mat-card>
<form
[formGroup]="parentForm"
(ngSubmit)="onSubmit()">
<mat-card-content>
<mat-form-field class="form-element">
<mat-label>parentName</mat-label>
<input
matInput
formControlName="parentName">
<mat-error *ngIf="!fCtrl.parentName.valid">必須項目です</mat-error>
</mat-form-field>
<div formGroupName="childGroup">
<mat-form-field class="form-element">
<mat-label>childName</mat-label>
<input
matInput
formControlName="childName">
<mat-error *ngIf="!fChildCtrl.childName.valid">必須項目です</mat-error>
</mat-form-field>
<mat-form-field class="form-element">
<mat-label>childCount</mat-label>
<input
matInput
formControlName="childCount">
<mat-error *ngIf="!fChildCtrl.childCount.valid">必須項目です</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions>
<button
mat-raised-button
type="submit"
color="primary">
登録
</button>
<button
mat-raised-button
type="button"
(click)="onInitChildForm()"
color="primary">
子フォーム初期化
</button>
</mat-card-actions>
</form>
</mat-card>
동작 확인
입력
초기화
등록 버튼 누르기
Reference
이 문제에 관하여(【Angular】 중첩된 formGroup을 초기화하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pg_yamaton/items/ebeddf24ce7418ac6939텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)