javascript - Angular - 响应式(Reactive)表单,如何正确存储初始值,并检查表单中的更改?

标签 javascript angular angular-reactive-forms

我正在使用 Angular 6 的响应式(Reactive)形式,我有 2 个问题。

第一,存储表单初始值的正确方法是什么?

我对 Angular 还很陌生,到目前为止我所做的是在 Controller 中声明所有表单代码,然后在 View 中使用 fromControlName 绑定(bind)这些控件标签。

一切正常,但现在我想实现一个保存/取消按钮。 由于表单是根据用户所做的一些选择进行预填充的(我使用 this.myForm.get("valueToPrefill").setValue(prefillValue) 预填充表单),因此当用户打开表单时,一些字段已经被预填充!

我需要做的是,以某种方式克隆或存储初始数据,所以当用户完成编辑时,如果他按“保存”,那么这个临时表单数据将被写入表单上(我猜是用就像我预填充它一样,get("form_Name).setValue() 对吧?),但如果他要使用取消按钮,那么我应该将表单恢复到原始状态!

目前,当用户填写表单值时,它会直接写入表单,因为 fromControlName 标记将输入字段绑定(bind)到我的表单。

我应该在这里做什么才能获得要写入的表单副本,并且只有在保存后,它才会将这些值写入我在 Controller 中声明的原始表单上?

第二个问题,目前,如果表单是原始的,我的“保存”按钮将被禁用。 但我还想更进一步! 如果用户删除字符或更改下拉列表,然后通过返回到原始值来恢复这些更改,则表单现在是脏的,但数据实际上从未从初始状态发生更改!那么在这种情况下如何保持“保存”按钮处于禁用状态呢? 我可以想象当我设法拥有克隆表单时进行检查,这样我就可以检查初始数据与存储的数据,并将它们进行比较,对吗?

非常感谢

最佳答案

您可以简单地使用@angular/forms API(https://angular.io/api/forms):

saveForm(){
this.savedFormState = formGroup.getRawValue()
}
resetForm(){
formGroup.patchValue(this.saveFormState);
// Reset states like dirty, markAsTouched
}

请注意,该对象必须与您的 FormGroup 匹配。

关于javascript - Angular - 响应式(Reactive)表单,如何正确存储初始值,并检查表单中的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54112175/

相关文章:

Angular - Reactive Forms - 如何使用类和验证器将对象传递给 FormGroup

javascript - 如何使用 jest 测试组件内的函数?

angular - HMR因Angular 9 + IVY : Type AppComponent is part of the declarations of 2 modules: AppModule and AppModule而失败

javascript - 需要 child div 成为 parent ,但在 js 或 css 中有可能吗?

Angular 6 http POST - 将参数设置为 URL 中的查询字符串

angular - Visual Studio Code : node_modules/@types/googlemaps/index. d.ts' 不是模块

Angular 4 FormGroup removeControl() 不更新表单

angular - 如何从 FormGroup 获取单个值

javascript - AngularJs,在添加或删除范围数据时使用淡入淡出

javascript - 为什么在以下场景中我无法访问 div 中包含的内部 div 和 input 元素?