2014-01-12 82 views
6

使用表單爲用戶編輯基於$ rootScope(也可以是$ scope)的變量的詳細信息。AngularJS取消綁定等效變量

$rootScope.formData = $rootScope.user; 

在視圖中,對輸入的NG-模型:

ng-model="formData.email" 

我期望的行爲是更新模型,只有$ rootScope.formData將更新,而是兩者更新。

有沒有辦法打破兩者之間的關係?

+0

人們期望這裏的工作是錯誤的。 'user'是一個參考。 JS中的對象作爲參考傳遞。而已。您始終可以調用clone或cloneDeep(例如lo-dash)。我建議重新考慮你的設計,基於JS行爲通過引用傳遞 –

+0

你是對的,文檔給出了這個確切的場景作爲angular.copy()的例子。如果你做出這個答案,我會將其標記爲這樣。我所要做的只是在該方法中封裝第二個變量。謝謝。 http://docs.angularjs.org/api/angular.copy – Jazzy

回答

6

正如評論中所述,我們正在使用JS引用。這意味着,我們正在過user作爲參照其他(根)範圍

我們可以稱之爲angular.copy()cloneDeep()(見lo-dash)有一個新的實例

+0

至少我的整體技術是由他們的文檔驗證:) – Jazzy

1

問題是你已經設置了一個對象到另一個。對象通過Javascript中的引用傳遞,因此您基本上使$rootScope.formData指向$rootScope.user。這就是爲什麼更新一個更新另一個。

你可能$rootScope.user = null;,這將基本上刪除的參考,但你已經失去了首先它的參考。如果這是不需要的,我想你可以將user對象克隆到formData,如果你沒有提供這個功能的庫,這本身就是一個壯舉。