首頁 > web前端 > js教程 > 了解Angular的$ applar()和$ digest()

了解Angular的$ applar()和$ digest()

尊渡假赌尊渡假赌尊渡假赌
發布: 2025-02-21 11:45:08
原創
764 人瀏覽過

Understanding Angular's $apply() and $digest()

>正在尋找一流的在線AngularJS培訓?查看Todd Motto的Ultimate Angular。使用Code SitePoint進行25%的折扣和支持SitePoint!

>

angularjs的$apply()$digest()>函數是基本的,但有時令人困惑的元素。 掌握它們是理解Angularjs內在工作的關鍵。本文闡明了它們在日常Angularjs開發中的作用和實際應用。

鑰匙要點:

對於AngularJS的雙向數據綁定,
  • 至關重要,可確保視圖和範圍模型之間的無縫更新。 $apply()>$digest()>在
  • 級別上啟動a
  • 循環,穿越所有子範圍並執行觀察者。當模型更改發生在其上下文中時,AngularJ會自動調用它。 當模型修改發生在AngularJS的上下文之外時(例如,使用$apply()>或DOM事件偵聽器),$digest的手動調用是必要的。這標誌著Angularjs以更新觀察者並正確傳播更改。 $rootScope
  • 循環多次迭代,驗證範圍模型更改。 它一直持續到未檢測到進一步更改或達到最大迭代限制(10)為止。
  • $apply()setTimeout()>深探究
  • >>
  • $digest
  • >
$apply()>每當更改時執行偵聽器函數。 關鍵的問題是: $digest()答案是>循環。 這個週期觸發了觀察者。 當觀察者開火時,AngularJS評估了範圍模型。如果檢測到更改,相應的偵聽器函數將運行。 >

循環由
$scope.$watch('aModel', function(newValue, oldValue) {
  // Update the DOM with newValue
});
登入後複製
登入後複製
>啟動。例如,如果您修改範圍內的示波器模型,則AngularJS會自動調用

。 這開始了周期,發射所有觀察者並相應地更新視圖。 其他指令/服務(例如,aModel)也觸發循環。 但是,AngularJS並未直接調用

。相反,它使用$digest()>,然後又調用$scope.$apply()。這樣可以確保$rootScope.$digest()循環從根部開始,並通過兒童範圍傳播。 當您與函數一起使用$digest時,AngularJS將函數調用包裝在ng-click>中。 $scope.$apply()>

有兩種形式:一種接受一個函數作為參數(首選),而無詞語版本只需啟動

cycle。 $apply()$digest手動

調用:

何時需要手動? AngularJS僅考慮<>>內部的模型更改(即用$apply()>包裝的代碼)進行的。內置指令會自動處理此操作。 但是,如果您修改了Angularjs上下文之外的模型,則必須手動致電以告知AngularJS更改。

例如,使用

更新範圍模型需要手動$apply()> $apply()>沒有$apply(),視圖將無法更新。 為此,它更喜歡

,因為它會自動處理

setTimeout()>的功能 - 題目版本是最好的,因為它使用$apply()塊通過

$scope.$watch('aModel', function(newValue, oldValue) {
  // Update the DOM with newValue
});
登入後複製
登入後複製

$apply()>循環迭代: $timeout $apply()$apply()循環反復運行,檢查模型更改。 如果偵聽器函數修改模型,則循環重新啟動以說明這些更改。這會一直持續到沒有更多更改或達到最大迭代數(10)為止。 旨在使掌聲的偵聽器功能最小化循環迭代。 try...catch> $exceptionHandler

結論:

理解$digest>和對於有效的AngularJs開發至關重要。 在對AngularJS上下文之外進行模型更改時,請記住要手動調用

。 盡可能使用

>避免手動$digest呼叫。

>

(為簡潔而刪除了常見問題部分。所提供的常見問題是重複的,在重寫文本的主體中很大程度上覆蓋。

以上是了解Angular的$ applar()和$ digest()的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板