我正在使用 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/