angularjs髒檢查機制

來源:互聯網
上載者:User

標籤:生命週期   標記   out   async   空白   apply   log   天空   機制   

  很久沒有寫點東西了,從今天起,在部落格園對自己過往的工作,學習和生活做一些梳理,總結和溫故。今天窗外的陽光不那麼任性,天空白雲點點,蟬鳴依舊嘹亮,安靜地坐在陽台上,吹著風,敲擊著鍵盤。於我而言,這就是幸福生活。

 

  轉入正題,對angularjs髒檢查機製做了個回顧和總結如下:

  參考文章:

   http://teropa.info/build-your-own-angular/

  http://www.cnblogs.com/likeFlyingFish/p/6183630.html

  http://www.ituring.com.cn/article/39865

 

 

1、Angular並不是周期性觸發髒檢查,更不是長串連輪詢檢查。

2、一般一個事件迴圈中執行到任務隊列時,如UI事件,ajax請求或者 timeout 延遲事件等觸發髒檢查。

3、Angular 每一個綁定到UI的資料,就會有一個 $watch 對象。

4、所有的watch儲存在$$watchList中,一次髒檢查就是調用一次 $apply() 或者 $digest(),遍曆檢查所有watch,將資料中最新的值呈現在介面上。

5、$digest現在至少運行每個監聽器一次了。如果第一次運行完,有監控值發生變更了,標記為dirty,所有監聽器再運行第二次。這會一直運行,直到所有監控的值都不再變化,整個局面穩定下來了。

6、關於$apply,大的想法是,我們可以執行一些與Angular無關的代碼,這些代碼也還是可以改變範圍上的東西,$apply可以保證範圍上的監聽器可以檢測這些變更。當人們談論使用$apply整合代碼到“Angular生命週期”的時候,他們指的就是這個事情,也沒什麼比這更重要的了。

7、但在Angular中還有一種延遲代碼的方式,那就是Scope上的$evalAsync函數。$evalAsync接受一個函數,把它列入計劃,在當前正持續的digest中或者下一次digest之前執行。舉例來說,你可以在一個監聽器的監聽函數中順延強制一些代碼,即使它已經被延遲了,仍然會在現有的digest遍曆中被執行。

 

angularjs髒檢查機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.