親コンポーネントに送信ボタンがあります。また、いくつかの子コンポーネントがあります。次に、検証に合格したら、ボタンを有効にして、フォームのすべての値をすべての子コンポーネントに保存します。親コンポーネントで、フォームグループを作成しました。
public mainForm: FormGroup;
親コンポーネントのコンストラクターでは、
constructor(private fb: FormBuilder) {
this.mainForm = this.fb.group({
child1Form: this.fb.group({
projectName: [null, Validators.required],
projectSource: [null, Validators.required]
});
});
}
親htmlでは、フォームを子に渡します。
<div>
<app-child1 [child1Form]="mainForm.controls['child1Form']"></app-child1>
</div>
子コンポーネントhtmlでは、コードは次のとおりです。
<form [formGroup]="child1Form">
<div>
<input [(ngModel)]="projectName" formControlName="projectName">
</div>
<div>
<input [(ngModel)]="projectSource" formControlName="projectSource">
</div>
</form>
子コンポーネントのtsファイルでは、親コンポーネントのフォームを使用します。
@Input() child1Form: any;
私が欲しいのはngOnInit
親コンポーネントの中にあります、フォームの検証をチェックしてください。
ngOnInit() {
this.mainForm.statusChanges.subscribe(data => {
const f = this.mainForm.controls['child1Form'];
if(f.valid || f.dirth)
// do something such as enable/disable the submit button
});
}
しかし、私の質問はstatusChanges
、子コンポーネントの入力コントロールのテキストを変更しても、コードが一部に到達しなかったことです。何かを入力すると、フォームの値またはステータスが変更され、検証を実行できると思います。
この問題を段階的に解決してみましょう。
parent
&child
コンポーネントを作成する<form>
<app-child></app-child>
<button>Submit</button>
</form>
<form [formGroup]="child1Form">
<div>
<input type="text" formControlName="projectName" required>
</div>
<div>
<input type="text" formControlName="projectSource" required>
</div>
</form>
child1Form
中child.component.ts(私は「child1Form」「child.component.ts」で宣言したではない「parent.component.ts」内) child1Form: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.child1Form = this.fb.group({
projectName: ['', Validators.required],
projectSource: ['', Validators.required]
})
}
statusChanges
値をサブスクライブして出力します。 @Output() isChild1FormValid: EventEmitter<boolean> = new EventEmitter<boolean>();
ngOnInit() {
this.child1Form.statusChanges.subscribe(value => {
if(value === 'VALID') {
this.isChild1FormValid.emit(true);
}
});
}
<form>
<app-child (isChild1FormValid)="enableSubmitButton($event)"></app-child>
</form>
isChild1FormValid: boolean;
enableSubmitButton(isValid: boolean) {
this.isChild1FormValid = isValid;
}
isChild1FormValid
プロパティがtrue
(parent.component.html)の場合、送信ボタンを有効にします<form>
<button type="submit" [disabled]="!isChild1FormValid">Submit</button>
</form>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加