2015-12-15 45 views
2

我有一個用戶對象,我想跟蹤用戶編輯他們的信息的情況下的變化,但他們可以說'放棄更改',它會返回到加載時用戶對象的以前的狀態。對象_.deepClone,不等於舊對象嗎?

我的解決方案是原來的對象deepClone到備份變種,給它它自己的參考點,然後比較用戶對象備份對象---再次使用lodash

我使用的角度看對象#$ watch,如果!_。isEqual(用戶,備份)。

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

但是這個返回false,即使有沒有變化?就好像兩個對象不再相等,即使所有的鍵和值都是相同的?我認爲比deepClone時看到的更多。

有沒有更好的方法?我做錯了什麼?

+0

你可以爲你的對象看起來像嗎? – TbWill4321

回答

0

問題很可能是user已被角度改變。 Angular添加了一些跟蹤綁定到視圖的對象的屬性(這些屬性以$$$開頭)。如果您的物品沒有這種「原生」屬性,那麼您可以先嚐試在user上執行deepOmit

0

這是一個典型的例子,當不變性的概念會幫助很多。如果你的對象是不可變的,那麼它的副本只意味着一個指向原始對象的指針,因此我認爲比較更加健壯。如果你想知道爲什麼Facebook已經接受它(並可能嘗試自己使用它),請查看https://facebook.github.io/immutable-js/

+1

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/10575950) – Benjamin

+0

@Benjamin我知道它並沒有直接解決這個問題,但它專注於*任何更好的方法?*。 – vikeri