因爲工做的緣由,使用angular1.x版本已經有一段時間了,雖然angualr2升級後就徹底重構了,但每一個版本存在也有必定的道理。話很少說,進入正題。ajax
AngualrJS的雙向綁定基於髒檢查機制,$scope上有一個監聽隊列,每當向視圖上綁定一個值,就會向watch list中插入一個watch,當遇到能夠被Angular context處理的事件,就會觸發$digest循環,遍歷全部的watch,更新DOM。app
UI發生變化,ajax請求,ng-click,$timeout...函數
$digest循環並非只運行一次的,一旦angualar運行整個$watch列表,若是任何值發生改變,應用程序將回退到$watch循環,直到它檢測到沒有任何更改。oop
不會,若是循環運行超過十次,angular會拋出異常,應用程序就會死掉。雙向綁定
<button ng-click="">click</button>
會。code
會。blog
會。
關於以上三個問題的總結,一個綁定表達式只要放在當前 DOM 樹裏就會被監視,無論它是否可見,無論它是否被放在另外一個 Tab 裏,更無論它是否與用戶操做相關。隊列
$apply會從rootScope上調用$digest事件
大體想到兩種場景get
若有寫的不正確的地方,歡迎留言討論。參考文章The-Digest-Loop-and-apply