我有一个表单显示< input type =“text”>列表元素。它们共享一个共同的保存按钮,该按钮在表单变脏之前被禁用。然后,一旦用户单击“保存”按钮,数据将被提交给服务器。如果服务器成功保存了数据,我想将表单重置为原始状态,但我想保留表单中的所有数据,以便用户可以进一步编辑数据。
搜索之后,我找到了NgForm.reset()方法。虽然这确实将形式设置为原始形式,但遗憾的是它也清除了形式。重置方法似乎确实有一个值参数,但我似乎无法找出它的作用。不过,我不希望数据被清除。
我也尝试了myForm.pristine = true,但由于某种原因,这会导致重新加载页面。
目前我可以提出两种可能的解决方案。
第一个非常接近你的建议,因为表单的重置方法具有以下签名并接受表单值作为第一个参数:
原文链接:/angularjs/143987.html第一个非常接近你的建议,因为表单的重置方法具有以下签名并接受表单值作为第一个参数:
//@angular/forms/src/model.d.ts: reset(value?: any,{onlySelf}?: { onlySelf?: boolean; }): void;
在提交处理程序中,我们将捕获最后一个状态的副本:
const { myForm: { value: formValueSnap } } = this;
并重置自己:
this.myForm.reset(formValueSnap,false);
当时没有可能重置表单的时候另一个选择是创建一个帮助方法,它将每个控件标记为原始并保留数据。它可以在同一个提交助手中调用,而不是重置。
private _markFormPristine(form: FormGroup | NgForm): void { Object.keys(form.controls).forEach(control => { form.controls[control].markAsPristine(); }); }