javascript - Angular(2 +) 检测 Angular 表单(反应式)中的数据是否已更改
问题描述
我有一些表格和按钮来保存它。仅当表单上有未保存的更改(输入)时,才必须启用该按钮。
<form>
<div>
... (inputs)
<span (click)="save()"> Save </span>
</div>
</form>
Angular 5中是否有一些用于表单脏检查的内置机制?实现此方案的最简单方法是什么?
解决方案
是的,有:我强烈建议您查看响应式表单的文档。
除此之外,内置机制仅用于检查表单的状态:
touched
表示用户已输入表单dirty
/!pristine
表示用户进行了修改
但是,如果您想处理所做的更改,则不应使用它:如果您的用户名将其用户名从“foo”更改为“bar”,然后又变回“foo”,则您的表单中没有任何更改,因此用户应该不必发送上述表格。
相反,我建议您创建一个函数,将表单与对象的原始值进行比较。您可以这样做:
// Creates a reference of your initial value
createReference(obj: any) {
this.reference = Object.assign({}, obj);
}
// Returns true if the user has changed the value in the form
isDifferent(obj: any, prop: string) {
return this.reference[prop] !== obj[prop];
}
submitForm(form: any) {
// ... Business code ...
hasChanges = false;
for (let prop in form) {
if (this.isDifferent(form, prop)) { hasChanges = true; }
}
// If no changes, cancel form submition
if (!hasChanges) { return; }
}
推荐阅读
- angular - 角度路线中的复杂正则表达式
- excel - Excel 如何显示我无权访问的其他 Excel 工作簿中的数据?
- android - 将 FCM 从 Firestore 发送到 Android 应用程序需要什么?
- ios - interactivePopGestureRecognizer 弹出到根目录而不是 1 个顶部控制器
- c# - 来自字节数组的 iText7 WmfImage 引发 IO 异常
- python - 无法抓取循环页面的内容(下一页)
- groovy - 是什么导致我的 Groovy 脚本中的 for 循环中出现意外的标记“=”?
- powershell - 如何使用PowerShell将文件从本地工作空间复制到远程服务器(不是网络共享路径)
- web - 需要从多个来源备份
- html - 如何在 CSS 中创建一个充满可变大小文本的完美圆形