ユーザーがフォームを前後に移動するマルチステップフォームがあります。フォームデータをインサービスで保存し、彼が戻ってきたら、patchvalueを使用してすべてのデータをフォームにパッチします。 setvalueも試しましたが、フォームフィールドがダーティまたはタッチ済みとしてマークされていません。更新されたフィールドをダーティおよびタッチ済みとしてマークするにはどうすればよいですか?
this.formBuilder.pathValue(formData);
この問題で私が見つけた唯一の解決策はそれです。
this.form = this.formBuilder.group({
id:[null],
name: ValidatorsUtil.name(),
lastName: ValidatorsUtil.required(),
email: ValidatorsUtil.email(),
phone: ValidatorsUtil.required(),
});
this.form.setValue(this.client, {emitEvent: true});
Object.keys(this.form.controls).forEach( controlKey => {
this.form.controls[controlKey].markAsDirty();
});
フォームオブジェクトに対してmarkAsDirty()
&markAsTouched()
メソッドを使用して、フォームに明示的にマークを付けることができます。 API Here を参照してください
this.formName.markAsDirty()
this.formName.markAsTouched()
更新
Angular 8以降では、markAllAsTouched
を使用して、すべてのフォームフィールドをtouched
としてマークできます。
this.formName.markAllAsTouched()