检查字段是不是已使用 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检查用户是不是在页面呈现之前登录

使用 MongoDB 检查字段是不是存在

检查 Flutter Firestore 中是不是已存在字段

Angular 6 - 在组件级别添加脚本并检查它是不是存在

如何检查 JWT 令牌是不是在 Angular 8 中过期