我有一个用户对象,我希望在用户编辑其信息的情况下跟踪更改,但是他们可以说'丢弃更改'并且它会在加载时返回到用户对象的先前状态。
我的解决方案是将原始对象deepClone转换为备份var,给它自己的引用点,然后将用户对象与备份对象进行比较---再次使用lodash
我使用angular#$ watch观察对象,如果!_。isEqual(用户,备份)。
$scope.$on '$routeChangeStart', (e, next) ->
if !_.isEqual(user, backup)
console.log 'changes made'
然而,即使没有变化,这也会返回false?这就好像两个对象不再相等,即使所有键和值都相同?我认为比我在深度克隆时看到的更多。
有更好的方法吗?我做错了什么?
答案 0 :(得分:0)
问题很可能是user
被角度改变了。 Angular添加了一些属性,用于跟踪绑定到视图的对象(这些属性以$
或$$
开头)。如果您的对象没有此类“原生”属性,您可以先尝试user
ciscoterminal.sendData("<CiscoIPPhoneExecute><ExecuteItem URL='Key:Applications'/><ExecuteItem URL='Key:KeyPad0'/></CiscoIPPhoneExecute>");
。
答案 1 :(得分:0)
这是一个典型的例子,当不变性的概念会有很大帮助时。如果你的对象是不可变的,那么它的副本只意味着指向原始对象的指针,因此我认为比较更加强大。如果你想知道为什么facebook已经接受它(并且可能自己尝试使用它),请查看deepOmit。