一个对象的_.deepClone,不等于旧对象?

时间:2015-12-15 22:21:08

标签: javascript angularjs cloning

我有一个用户对象,我希望在用户编辑其信息的情况下跟踪更改,但是他们可以说'丢弃更改'并且它会在加载时返回到用户对象的先前状态。

我的解决方案是将原始对象deepClone转换为备份var,给它自己的引用点,然后将用户对象与备份对象进行比较---再次使用lodash

我使用angular#$ watch观察对象,如果!_。isEqual(用户,备份)。

$scope.$on '$routeChangeStart', (e, next) -> if !_.isEqual(user, backup) console.log 'changes made'

然而,即使没有变化,这也会返回false?这就好像两个对象不再相等,即使所有键和值都相同?我认为比我在深度克隆时看到的更多。

有更好的方法吗?我做错了什么?

2 个答案:

答案 0 :(得分:0)

问题很可能是user被角度改变了。 Angular添加了一些属性,用于跟踪绑定到视图的对象(这些属性以$$$开头)。如果您的对象没有此类“原生”属性,您可以先尝试user ciscoterminal.sendData("<CiscoIPPhoneExecute><ExecuteItem URL='Key:Applications'/><ExecuteItem URL='Key:KeyPad0'/></CiscoIPPhoneExecute>");

答案 1 :(得分:0)

这是一个典型的例子,当不变性的概念会有很大帮助时。如果你的对象是不可变的,那么它的副本只意味着指向原始对象的指针,因此我认为比较更加强大。如果你想知道为什么facebook已经接受它(并且可能自己尝试使用它),请查看deepOmit