Angular 9-如何正确比较复制的对象的更改



我有一个API调用,它返回一些数据:

this.myAPI.getProfile().subscribe(result => {
this.currentProfile = result;
});

现在在我的项目中,用户可以编辑个人资料信息,要进入编辑模式,他可以点击一个按钮。

在进入编辑模式时,我会复制当前配置文件对象,因此如果用户恢复更改(通过使用"取消"按钮(,我将恢复原始数据。

this.currentProfileCopy = JSON.parse(JSON.stringify(this.currentProfile));

一切都很好,但我有一个问题,我想保留";保存";如果没有信息被更改,按钮被禁用,因此检查将是:

this.currentProfile == this.currentProfileCopy

问题是,此检查永远不会返回true。我想这和JSON.stringify有关。

我也试过:

JSON.parse(JSON.stringify(this.currentProfile)) == this.currentProfileCopy

这也总是返回false。。

实现这一点的正确方法是什么?

重要信息:我不能使用LoDash,只有Angular方法,因为我使用的是构建Angular代码的框架,不能导入外部库。我也不能使用类似valueChanges之类的东西,我需要通过比较原始对象和它的副本来做到这一点

没有一个用于比较对象的解决方案。这完全取决于您的对象以及它所包含的数据类型。

根据您有限的信息,我只能建议根据JSON字符串进行比较,因此如下所示:JSON.stringify(this.currentProfile) === JSON.stringify(this.currentProfileCopy)

您可以对比较的两边都使用JSON.stringify方法。

JSON.stringify(this.currentProfile) === JSON.stringify(this.currentProfileCopy)

您可以使用lodash库。要比较两个对象,可以使用isEqual函数。

https://lodash.com/docs/#isEqual

最新更新