国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

利用angular.copy取消變量的雙向綁定與解析

2019-11-19 18:49:22
字體:
來源:轉載
供稿:網友

首先我們來看看示例代碼

<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>


從上面的演示可以看到,當點擊copy按鈕時,copyData的值就變成了”this is old data”,成功將user的值復制到copyUser.

當點擊change按鈕后,user1和user的值都變成了'is changed',而copyUser的值卻沒有發生改變。這時候在input輸入框改變值,user和user1的值都會跟著改變,說明了這二者實際上是同一個變量引用。而copyUser沒有發生變化。

angular.copy 能取消雙向綁定的原理

這跟JavaScript中對象是引用類型有關。

JavaScript中的值類型

在JavaScript中,值分為原始值和引用值兩種類型。

     原始值:存儲在棧(Stack)中的簡單數據字段,也就是說,它們的值是直接存儲在變量訪問的位置;

     引用值:存儲在堆(heap)中,也就是說,存儲在變量處的值是一個指針,指向存儲對象的內存處。

如下圖所示:

在JavaScript中的對象便是引用值,也就是說對象是通過引用傳遞值的。

所以在上述的代碼中:

對象$scope.user$scope.user1的值都是指向了同一個引用。對于Angular來說,監聽變量變化是在監聽其對象所引用的地址,所以當對象的引用值發生了變化,所有指向它的對象都會跟著發生變化。

所以在Angular中,直接通過對象的賦值是無法解除雙向綁定的。所以要想解除雙向綁定的辦法就是新創建個對象,然后將原有的對象的值賦值給新對象。這不就是JavaScript中的深拷貝嘛。

對的,angular.copy就是Angular提供的 deep copy 的方法。所以通過angular.copy復制出來的對象,既能和原有的對象值保持一致,又不與舊對象指向同一個引用,從而實現了解除對象變量的雙向綁定。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用Angular.js能有所幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 文登市| 通海县| 定南县| 潍坊市| 建平县| 天峻县| 西藏| 安丘市| 绥宁县| 玛多县| 姜堰市| 剑川县| 万山特区| 运城市| 陵川县| 柯坪县| 东兴市| 黑河市| 岑巩县| 彭泽县| 乌鲁木齐县| 东丰县| 合江县| 扶余县| 安图县| 新化县| 当雄县| 西安市| 那曲县| 大悟县| 景洪市| 黄冈市| 卢龙县| 延川县| 富顺县| 克拉玛依市| 梁山县| 衢州市| 江西省| 江西省| 灌南县|