检查字段是不是已使用 Angular 6 和 Firestore 进行了修改
Posted
技术标签:
【中文标题】检查字段是不是已使用 Angular 6 和 Firestore 进行了修改【英文标题】:Check if a field has been modified with angular 6 and firestore检查字段是否已使用 Angular 6 和 Firestore 进行了修改 【发布时间】:2019-01-09 06:15:21 【问题描述】:我有一个用于编辑用户详细信息的表单,它应该检查用户是否进行了修改,如果没有,则不要进行更改。
目前正在使用if
来检查哪个有效,但我仍然觉得这不是有效的方法,因为我有多个字段必须检查每个字段,这使得代码重复且庞大。
if (f.value.first_name)
this.user.firstName = f.value.first_name;
我尝试过使用 elvis 运算符,但它不适合我
this.user.firstName ? this.user.firstName :f.value.first_name;
还有其他有效的方法吗?
【问题讨论】:
如果您的代码有效,而您只是在寻求提高效率的方法,我建议您在 Code Review Stack Exchange 上提问。 【参考方案1】:您可以遍历每个表单控件并检查它们是否为dirty
(已修改)。
Object.keys(f.controls).forEach((key: string) =>
if (f.get(key).dirty)
this.user[key] = f.get(key).value
);
【讨论】:
【参考方案2】:我保留原始对象的副本,然后这样做:
get isDirty(): boolean
return JSON.stringify(this.originalProduct) !== JSON.stringify(this.currentProduct);
我stringify
原始产品(编辑前)和当前产品的副本并比较它们。我假设如果它们不相等,那么某些东西会发生变化。
这种方法有一些注意事项,特别是如果您的对象结构很复杂,因为 可能 在某些情况下 stringify 不会创建完全相同的字符串。但是我没有遇到过这种情况。
【讨论】:
将测试这看起来很有希望:)以上是关于检查字段是不是已使用 Angular 6 和 Firestore 进行了修改的主要内容,如果未能解决你的问题,请参考以下文章
如何检查数据是不是已完成加载以使用异步管道 Angular 8
Angular 6 AngularFireAuth检查用户是不是在页面呈现之前登录
检查 Flutter Firestore 中是不是已存在字段