【发布时间】:2018-06-02 05:44:09
【问题描述】:
我有一个多步骤表单,用户在表单中来回遍历。我将表单数据保存在服务中,当他回来时,我使用 patchValue 修补所有数据以形成表单。我也尝试了 setValue,但表单字段没有被标记为脏的或被触摸的。如何将更新的字段标记为脏和已触摸?
this.formBuilder.patchValue(formData);
【问题讨论】:
我有一个多步骤表单,用户在表单中来回遍历。我将表单数据保存在服务中,当他回来时,我使用 patchValue 修补所有数据以形成表单。我也尝试了 setValue,但表单字段没有被标记为脏的或被触摸的。如何将更新的字段标记为脏和已触摸?
this.formBuilder.patchValue(formData);
【问题讨论】:
您可以在表单对象上使用markAsDirty() 和markAsTouched() 方法显式标记表单。见API Here
this.formName.markAsDirty()
this.formName.markAsTouched()
更新
从 Angular 8 开始,您可以使用 markAllAsTouched 将所有表单字段标记为 touched
this.formName.markAllAsTouched()
【讨论】:
我为这个问题找到的唯一解决方案就是它。
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();
});
【讨论】: