欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年11月25日 11:46:49   投稿:daisy  
眾所周知AngularJS的雙向綁定在表單應(yīng)用中強(qiáng)大又方便,但是偶爾會(huì)遇到需要解除對(duì)象變量的雙向綁定。Angular提供的angular.copy的方法可以實(shí)現(xiàn)解除雙向綁定。所以這篇文章就來(lái)給大家詳細(xì)的介紹下angular.copy,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。

首先我們來(lái)看看示例代碼

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


從上面的演示可以看到,當(dāng)點(diǎn)擊copy按鈕時(shí),copyData的值就變成了”this is old data”,成功將user的值復(fù)制到copyUser.

當(dāng)點(diǎn)擊change按鈕后,user1和user的值都變成了'is changed',而copyUser的值卻沒(méi)有發(fā)生改變。這時(shí)候在input輸入框改變值,user和user1的值都會(huì)跟著改變,說(shuō)明了這二者實(shí)際上是同一個(gè)變量引用。而copyUser沒(méi)有發(fā)生變化。

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

這跟JavaScript中對(duì)象是引用類型有關(guān)。

JavaScript中的值類型

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

     原始值:存儲(chǔ)在棧(Stack)中的簡(jiǎn)單數(shù)據(jù)字段,也就是說(shuō),它們的值是直接存儲(chǔ)在變量訪問(wèn)的位置;

     引用值:存儲(chǔ)在堆(heap)中,也就是說(shuō),存儲(chǔ)在變量處的值是一個(gè)指針,指向存儲(chǔ)對(duì)象的內(nèi)存處。

如下圖所示:

在JavaScript中的對(duì)象便是引用值,也就是說(shuō)對(duì)象是通過(guò)引用傳遞值的。

所以在上述的代碼中:

對(duì)象$scope.user$scope.user1的值都是指向了同一個(gè)引用。對(duì)于Angular來(lái)說(shuō),監(jiān)聽變量變化是在監(jiān)聽其對(duì)象所引用的地址,所以當(dāng)對(duì)象的引用值發(fā)生了變化,所有指向它的對(duì)象都會(huì)跟著發(fā)生變化。

所以在Angular中,直接通過(guò)對(duì)象的賦值是無(wú)法解除雙向綁定的。所以要想解除雙向綁定的辦法就是新創(chuàng)建個(gè)對(duì)象,然后將原有的對(duì)象的值賦值給新對(duì)象。這不就是JavaScript中的深拷貝嘛。

對(duì)的,angular.copy就是Angular提供的 deep copy 的方法。所以通過(guò)angular.copy復(fù)制出來(lái)的對(duì)象,既能和原有的對(duì)象值保持一致,又不與舊對(duì)象指向同一個(gè)引用,從而實(shí)現(xiàn)了解除對(duì)象變量的雙向綁定。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用Angular.js能有所幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • Angular中使用$watch監(jiān)聽object屬性值的變化(詳解)

    Angular中使用$watch監(jiān)聽object屬性值的變化(詳解)

    下面小編就為大家?guī)?lái)一篇Angular中使用$watch監(jiān)聽object屬性值的變化(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Angular6 寫一個(gè)簡(jiǎn)單的Select組件示例

    Angular6 寫一個(gè)簡(jiǎn)單的Select組件示例

    這篇文章主要介紹了Angular6寫一個(gè)簡(jiǎn)單的Select組件示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Angular CLI在Angular項(xiàng)目中如何使用scss詳解

    Angular CLI在Angular項(xiàng)目中如何使用scss詳解

    angular-cli自身支持Scss預(yù)處理器,Scss比css更加方便靈活,而且層次清晰,代碼整潔。下面這篇文章主要給大家介紹了關(guān)于Angular CLI在Angular項(xiàng)目中如何使用scss的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04
  • Angular 封裝并發(fā)布組件的方法示例

    Angular 封裝并發(fā)布組件的方法示例

    本篇文章主要介紹了Angular 封裝并發(fā)布組件的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • angular中的post請(qǐng)求處理示例詳解

    angular中的post請(qǐng)求處理示例詳解

    這篇文章主要給大家介紹了關(guān)于angular中post請(qǐng)求處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用angular具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 淺談AngularJs指令之scope屬性詳解

    淺談AngularJs指令之scope屬性詳解

    下面小編就為大家?guī)?lái)一篇淺談AngularJs指令之scope屬性詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • AngularJS基礎(chǔ)知識(shí)筆記之過(guò)濾器

    AngularJS基礎(chǔ)知識(shí)筆記之過(guò)濾器

    在我們開發(fā)中經(jīng)常需要在頁(yè)面顯示給用戶的信息需要一定處理格式化,才能顯示給用戶。比如時(shí)間本地化,或者yyyy-MM-dd HH:mm:ss格式,數(shù)字精度格式化,本地化,人名格式化等等。在angularjs中為我們提供了叫filter的指令,讓我們能夠很輕易就能做到著一些列的功能
    2015-05-05
  • 學(xué)習(xí)Angularjs分頁(yè)指令

    學(xué)習(xí)Angularjs分頁(yè)指令

    這篇文章主要和大家一起學(xué)習(xí)Angularjs分頁(yè)指令,代碼很詳細(xì),文章結(jié)構(gòu)緊湊,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 詳解Angular之路由基礎(chǔ)

    詳解Angular之路由基礎(chǔ)

    單頁(yè)應(yīng)用中,組件時(shí)構(gòu)建應(yīng)用的基礎(chǔ)元素,頁(yè)面展示什么內(nèi)容均是靠頁(yè)面有什么組件決定的,而展示什么組件又是由一組路由(帶有Url元素的特定集合,可用于導(dǎo)航視圖)決定的,希望本文可以幫助讀者了解路由的基礎(chǔ)概念和基礎(chǔ)使用、寫法。
    2021-05-05
  • 詳解Angular開發(fā)中的登陸與身份驗(yàn)證

    詳解Angular開發(fā)中的登陸與身份驗(yàn)證

    Angular是Google開發(fā)的一款瀏覽器端的高人氣JavaScript框架,Angular 經(jīng)常會(huì)被用到后臺(tái)和管理工具的開發(fā),這兩類都會(huì)需要對(duì)用戶進(jìn)行鑒權(quán)。而鑒權(quán)的第一步,就是進(jìn)行身份驗(yàn)證。本文詳細(xì)介紹了Angular開發(fā)中的登陸與身份驗(yàn)證。
    2016-07-07

最新評(píng)論