2016-08-02 4 views
0

私は角度1.3.15を使用しています。私は、最初の変数($scope.twotap_builtin_cart.sites[sikey].shipping)に$scope.shipping_addressのデータが割り当てられているように、データをバインドする必要があります。たとえ後で$scope.twotap_builtin_cart.sites[sikey].shippingという名前の変数が変更されたとしても、他の$scope.shipping_addressには影響しません。私はあなたと思う程度1時間結合または1つの方法$scope.twotap_builtin_cart.sites[sikey].shipping$scope.shipping_address角片方向バインディング

答えて

2

結合を話していますバインドを探しているのではなく、変数の値を別の変数に割り当てるだけです。 JSONオブジェクト(そして$scopeがそのようなオブジェクトの1つ)の場合、a = bbの内容をaにコピーするのではなく、abの両方を同じオブジェクトに参照しています。あなたのケースでは

b = JSON.parse(JSON.stringify(a)) ; 

:最良の方法のように割り当てを実行することで、あなたがこれを行う

$scope.twotap_builtin_cart.sites[sikey].shipping = JSON.parse(JSON.stringify($scope.shipping_address)) ; 

一つ、両方の変数が同じ情報を保持するが、彼らは他に影響を与えずに変更することができます。

+0

ディープ・コーピングとは – Rajib

2

にそのつもりはないバインドを変更する場合でも、あなたは深い

$scope.shipping_address = angular.copy($scope.twotap_builtin_cart.sites[sikey].shipping) 

を対処するためのこの方法をangular.copy()を使用する必要があります

+0

json.parseは構文解析を行い、json.stringifyはJavaScript値をJSON文字列に変換します。値を代入するときの実際の動作 – Rajib

+0

JSON.parseはJSON互換の文字列を受け取り、JSONオブジェクトを返します。 JSON.strigifyはJSONオブジェクトを受け取り、文字列を返します。したがって、これを使用して、私の例では 'b 'に割り当てるオブジェクトのコピーを作成し、ソース変数とターゲット変数をリンクせずに割り当てを行います。 – FDavidov

+0

ちなみに、私はこのアプローチが他のライブラリ(Angularのような)から独立しているので、この方法をお勧めします。 – FDavidov

2

同様の要件がこの質問に頼まれた: Edit with bootstrap modal and angulajs

同様に、あなたはどの長引くバインディングせずにデータを複製するAngularJS copy機能を使用することができます。ここで

$scope.twotap_builtin_cart.sites[sikey].shipping = angular.copy($scope.shipping_address); 

我々は、他の変数に$scope.shipping_addressから値をコピーしています。今度は$scope.twotap_builtin_cart.sites[sikey].shippingに変更しても、これは$scope.shipping_addressに反映されません - これはあなたが望むものです。

関連する問題