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

淺談angular.js中實現(xiàn)雙向綁定的方法$watch $digest $apply

 更新時間:2015年10月14日 11:07:04   作者:一介布衣  
Angular用戶都想知道數(shù)據(jù)綁定是怎么實現(xiàn)的。你可能會看到各種各樣的詞匯:$watch,$apply,$digest它們是如何工作的呢?這里我想回答這些問題,其實它們在官方的文檔里都已經(jīng)回答了,但是我還是想把它們結(jié)合在一起來講

Angular.js 中的特性,雙向綁定.

多么神奇的功能,讓視圖的改變直接反應(yīng)到數(shù)據(jù)中,數(shù)據(jù)的改變又實時的通知到視圖,如何做到的?

這要歸功于 scope 下面3個重要的方法:

$watch
$digest
$apply

他們的區(qū)別是什么,我們來介紹下:

$watch
這是一個監(jiān)聽 scope 上數(shù)據(jù)的監(jiān)聽器

方法說明:

$scope.$watch('參數(shù)',function(newValue,oldValue){
 //邏輯處理
})

上面我們就是創(chuàng)建了一個監(jiān)聽器.
‘參數(shù)' 就是$scope對象下的一個對象(或者一個對象的屬性),注意,這里是字符串形式.

假如你要監(jiān)聽 $scope.name 屬性.

$scope.$watch('name',function(newValue,oldValue){
 //邏輯處理
})

如上代碼, ‘name' 需要引號

參數(shù)后面跟著回調(diào)函數(shù),回調(diào)函數(shù)參數(shù)返回了被監(jiān)聽 屬性,變化后的新值,以前變化前的舊值.

$digest

他負(fù)責(zé)檢查 scope 中的數(shù)據(jù)是否發(fā)生了變化,如果某個屬性有變化,馬上會通知此屬性的監(jiān)聽器 ($watch 注冊的監(jiān)聽器),觸發(fā)監(jiān)聽器,執(zhí)行回調(diào)函數(shù).

$apply

這個方法和 $digest 很相似, $digest 檢查scope 中的所有數(shù)據(jù)
$apply 相當(dāng)于檢查 rootScope 中的所有數(shù)據(jù),他會從父級到子級來檢查所有數(shù)據(jù)

$apply() == $rootScope.$digest()

$apply() 方法有兩種形式.

第一種 接受一個 function作為參數(shù).
這樣觸發(fā) $digest 函數(shù)并且執(zhí)行一次 參數(shù)中的 function

第二種  不接受任何參數(shù).
這樣只是觸發(fā)一輪 $digest 父級到子級的循環(huán)

Angular.js 中一班不會直接調(diào)用 $digest ,而是用 $scope.$apply() 來代替

我沒有設(shè)定監(jiān)視器,為什么視圖和數(shù)據(jù)可以雙向綁定

比如一個文本框 ng-model="name"
這時其實 $scope 對象下已經(jīng)有了一個屬性 name 來對應(yīng)和 上面的視圖進(jìn)行雙向綁定

如何實現(xiàn)的?

其實,當(dāng)我們定義 ng-model="name"  或者 ng-bind="name" 或者 {{name}}
這時 angular.js 會在 $scope 模型上自動為 “name” 屬性設(shè)置一個監(jiān)聽器:

$scope.$watch('name', function(newValue, oldValue) {
  //監(jiān)聽 name 屬性的變化
});

原來這里 angular.js 幫我們自動創(chuàng)建了一個監(jiān)聽器,所以此屬性和 $scope.name 數(shù)據(jù)才會實時的雙向綁定.

當(dāng)然,有時候你也會發(fā)現(xiàn)明明數(shù)據(jù)變化了.但是UI 沒有刷新,是雙向綁定失效了嗎?

沒有

只是在 $scope 模型遍歷 digest 循環(huán)時,你的數(shù)據(jù)還沒有返回來,

比如異步調(diào)用方法,callbac 返回的數(shù)據(jù)
比如你在 setTimeout 設(shè)置了定時觸發(fā)函數(shù),然后修改模型數(shù)據(jù)
總之,是錯過了 $scope 模型的 digest 循環(huán),導(dǎo)致模型沒有通知UI去根據(jù)新數(shù)據(jù)刷新.

遇到這樣的問題怎么辦?

我們只好自己去手動調(diào)用 digest來循環(huán)檢查一次數(shù)據(jù).實現(xiàn)雙向綁定

上面我們已經(jīng)說過,通常不要去直接調(diào)用 digest 方法,而是手動調(diào)用 $apply 方法,間接實現(xiàn)觸發(fā) $digest 循環(huán).

如下:

setTimeout(function() {
 $scope.name= '一介布衣';
 $scope.$apply();
}, 2000);

問題來了,上面時候該去手動調(diào)用 apply 方法

目前為止, angular.js 為一部分指令和服務(wù)自動實現(xiàn)了 $apply() 方法.

例如, ng-click ,ng-model ,$timeout服務(wù),$http服務(wù) 等

調(diào)用后,angular.js 會自動幫我們調(diào)用 $apply() 來實現(xiàn)數(shù)據(jù)雙向綁定.

相關(guān)文章

  • Angular實現(xiàn)表格自滾動效果

    Angular實現(xiàn)表格自滾動效果

    這篇文章主要為大家介紹了如何通過Angular實現(xiàn)表格自動滾動的效果,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Angular有一定幫助,需要的可以參考一下
    2022-01-01
  • Angular.js中下拉框?qū)崿F(xiàn)渲染html的方法

    Angular.js中下拉框?qū)崿F(xiàn)渲染html的方法

    這篇文章主要給大家介紹了關(guān)于在Angular.js中下拉框?qū)崿F(xiàn)渲染html的方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • Angular2.0實現(xiàn)modal對話框的方法示例

    Angular2.0實現(xiàn)modal對話框的方法示例

    這篇文章主要介紹了Angular2.0實現(xiàn)modal對話框的方法,結(jié)合實例形式分析了angular2.0實現(xiàn)modal對話框的樣式、界面及功能等相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • 淺談Angular 的變化檢測的方法

    淺談Angular 的變化檢測的方法

    這篇文章主要介紹了淺談Angular 的變化檢測的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • angular中兩種表單的區(qū)別(響應(yīng)式和模板驅(qū)動表單)

    angular中兩種表單的區(qū)別(響應(yīng)式和模板驅(qū)動表單)

    這篇文章主要介紹了angular中兩種表單的區(qū)別(響應(yīng)式和模板驅(qū)動表單),詳細(xì)的介紹了這兩種表單的實現(xiàn)以及區(qū)別,非常具有實用價值,需要的朋友可以參考下
    2018-12-12
  • 詳解關(guān)于Angular4 ng-zorro使用過程中遇到的問題

    詳解關(guān)于Angular4 ng-zorro使用過程中遇到的問題

    這篇文章主要介紹了詳解關(guān)于Angular4 ng-zorro使用過程中遇到的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Angularjs編寫KindEditor,UEidtor,jQuery指令

    Angularjs編寫KindEditor,UEidtor,jQuery指令

    使用過 AngularJS 的朋友應(yīng)該最感興趣的是它的指令?,F(xiàn)今市場上的前端框架也只有AngularJS 擁有自定義指令的功能,并且AngularJS 是目前唯一提供Web應(yīng)用可復(fù)用能力的框架。
    2015-01-01
  • Angularjs上傳圖片實例詳解

    Angularjs上傳圖片實例詳解

    上傳圖片需要引入插件ngFileUpload,使用bower安裝方法,下面通過本文給大家介紹Angularjs上傳圖片實例詳解,希望對大家有所幫助
    2017-08-08
  • angularjs實現(xiàn)的購物金額計算工具示例

    angularjs實現(xiàn)的購物金額計算工具示例

    這篇文章主要介紹了angularjs實現(xiàn)的購物金額計算工具,涉及AngularJS事件監(jiān)聽、數(shù)值計算相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • angularjs實現(xiàn)首頁輪播圖效果

    angularjs實現(xiàn)首頁輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了angularjs實現(xiàn)首頁輪播圖效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論