2014-01-12 2 views
6

$ rootScope($ scopeでもかまいません)の変数に基づいてユーザーの詳細を編集するためのフォームの作業。ビューでAngularJS等価変数のバインドを解除する

$rootScope.formData = $rootScope.user; 

、NG-モデルは入力にあります:

ng-model="formData.email" 

私は期待して挙動がモデルを更新することであり、唯一の$ rootScope.formDataは更新し、代わりに、両方のだろう更新。

2つの関係を解除する方法はありますか?

+0

新しいインスタンスで動作するように(lo-dashを参照)angular.copy()またはcloneDeep()を呼び出すことができます。 'user'は参照です。 JS内のオブジェクトは参照として渡されます。それでおしまい。あなたはいつでもcloneまたはcloneDeep(例えばlo-dash)を呼び出すことができます。私はJSの振る舞いが参照渡しであるという事実に基づいてあなたのデザインを再考することを提案します。 –

+0

あなたは正しいので、docはangular.copy()の例としてこの厳密なシナリオを与えます。あなたがこれを答えにするなら、私はそのようにマークします。私がしなければならなかったのは、そのメソッドで2番目のvarをラップすることでした。ありがとう。 http://docs.angularjs.org/api/angular.copy – Jazzy

答えて

6

コメントで説明したように、私たちはJSリファレンスを扱っています。我々は他の(ルート)を基準として範囲

userを渡しているということを意味は、私たちはここに期待が間違っている

+0

少なくとも、私の全体的なテクニックはドキュメントによって検証されました:) – Jazzy

1

問題は、あるオブジェクトを別のオブジェクトに設定したことです。オブジェクトはJavascriptで参照渡しされるため、$rootScope.formDataには$rootScope.userへのポインタが基本的になりました。これは、一方が他方を更新する理由です。

あなたは$rootScope.user = null;とすることができますが、これは基本的に参照を削除することになりますが、最初はその参照を失ってしまいます。それが望ましくない場合は、userオブジェクトをformDataにクローンすることができます。これは、この機能を提供するライブラリを持っていない場合には、それ自体が素晴らしいことです。

関連する問題