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