我正在閱讀很多關於AngularJS的文章,並且我遇到了這個神奇的$ watch函數。我明白如何使用它,但我想知道它是如何在後臺實現的。它是一個時間間隔函數嗎?或者它是否角度地稱這個手錶執行了每一個聲明?
我現在不想深入研究源代碼,如果你們其中一位已經知道答案並想分享他對這個主題的知識,我會很高興。
謝謝。
我正在閱讀很多關於AngularJS的文章,並且我遇到了這個神奇的$ watch函數。我明白如何使用它,但我想知道它是如何在後臺實現的。它是一個時間間隔函數嗎?或者它是否角度地稱這個手錶執行了每一個聲明?
我現在不想深入研究源代碼,如果你們其中一位已經知道答案並想分享他對這個主題的知識,我會很高興。
謝謝。
每個摘要循環評估(有時多次)所有手錶。摘要循環是由於某些事件或調用$ apply()而輸入的。手錶不是基於定時器週期性地調用的。
見https://docs.angularjs.org/guide/scope#integration-with-the-browser-event-loop
瀏覽器的事件循環等待一個事件的到來。事件的回調得到執行......一旦回調執行,瀏覽器就會離開JavaScript上下文並根據DOM更改重新呈現視圖。 Angular通過提供自己的事件處理循環來修改正常的JavaScript流程。這將JavaScript分解爲經典和Angular執行上下文...... Angular執行[some] stimulusFn(),它通常會修改應用程序狀態。 Angular進入$ digest循環。該循環由處理$ evalAsync隊列和$ watch列表的兩個較小的循環組成。 $ digest循環持續迭代,直到模型穩定,這意味着$ evalAsync隊列爲空,$ watch列表不檢測任何更改。 $ watch列表是一組表達式,自上次迭代以來可能發生了變化。如果檢測到更改,則會調用$ watch函數,該函數通常會使用新值更新DOM。
這將幫助你http://stackoverflow.com/questions/9682092/databinding-in-angularjs/9693933#9693933 – Chandermani
這太... http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ – Sushrut
下面是一篇關於它是如何工作的真實文章:http://teropa.info/blog/2013/11/03/make -your-own-angular-part-1-scopes-and-digest.html –