まずはサンプルコードを見てみましょう
<body ng-app="app"> <div ng-controller="CopyController"> <div> data: <input ng-model="user.data" /><br> user.data: {{user.data}} <br> user1.data: {{user1.data}} <br> <button ng-click="changeData1()">change</button> <br> <button ng-click="copy()">copy</button> <br> copyData: {{copyUser.data}} </div> </div> <script src="node_modules/angular/angular.min.js"></script> </body> <script> angular.module('app', []) .controller('CopyController', function ($scope) { // body... $scope.changeData1 = function () { // body... scope.user1=scope.user1= scope.user; $scope.user1.data = 'is changed'; } $scope.copy = function () { // body... scope.copyUser=angular.copy(scope.copyUser=angular.copy( scope.user); } }); </script>
上記のデモからわかるように、コピーボタンをクリックするとcopyDataの値が「これは古いデータです」となり、userの値がcopyUserへのコピーに成功しました
変更ボタンをクリックするとuser1とuserの値が「変更されました」となりますが、copyUserの値は変更されません。このとき、入力ボックスで値を変更すると、それに応じてuserとuser1の値も変化し、両者が実際には同じ変數(shù)參照であることがわかります。また、copyUser は変更されていません。
angular.copy は雙方向バインディングの原則をキャンセルできます
これは、JavaScript のオブジェクトが參照型であるという事実に関連しています。
JavaScriptの値の型
JavaScriptでは、値はプリミティブ値と參照値の2種類に分けられます。
プリミティブ値: スタックに保存される?yún)g純なデータフィールド、つまり、その値は変數(shù)がアクセスされる場所に直接保存されます。
參照値: ヒープに保存されます、つまり、値変數(shù)に格納されるのは、オブジェクトが格納されているメモリ位置へのポインタです。
JavaScript のオブジェクトは參照値です。つまり、オブジェクトは參照によって値を渡します。
したがって、上記のコードでは:
オブジェクト $scope.user と $scope.user1 の値は両方とも同じ參照を指します。 Angular の場合、変數(shù)の変更を監(jiān)視することは、そのオブジェクトによって參照されるアドレスを監(jiān)視することになるため、オブジェクトの參照値が変更されると、それを指すすべてのオブジェクトもそれに応じて変更されます。
そのため、Angular では、オブジェクトの割り當(dāng)てを通じて雙方向バインディングを直接解放することはできません。したがって、雙方向バインディングをキャンセルする方法は、新しいオブジェクトを作成し、元のオブジェクトの値を新しいオブジェクトに割り當(dāng)てることです。これは JavaScript の単なるディープコピーではないでしょうか?
はい、angular.copy は Angular が提供するディープ コピー メソッドです。したがって、angular.copy を通じてコピーされたオブジェクトは、元のオブジェクトの値と一貫性を保つことができ、古いオブジェクトと同じ參照をポイントしないため、オブジェクト変數(shù)の雙方向バインディングが実現(xiàn)されます。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)