AngularJS 執(zhí)行流程詳細(xì)介紹
一、啟動(dòng)階段
大家應(yīng)該都知道,當(dāng)瀏覽器加載一個(gè)HTML頁面時(shí),它會(huì)將HMTL頁面先解析成DOM樹,然后逐個(gè)加載DOM樹中的每一個(gè)元素節(jié)點(diǎn)。我們可以把AngularJS當(dāng)做一個(gè)類似jQuery的js庫(kù),我們通過<script>標(biāo)簽引入到HTML中,那么此時(shí)Angular就做為一個(gè)普通的DOM節(jié)點(diǎn)等待瀏覽器解析,當(dāng)瀏覽器解析到這個(gè)節(jié)點(diǎn)時(shí),發(fā)現(xiàn)它是一個(gè)js文件,那么瀏覽器會(huì)停止解析剩余的DOM節(jié)點(diǎn),開始執(zhí)行這個(gè)js(即angular.js),同時(shí)Angular會(huì)設(shè)置一個(gè)事件監(jiān)聽器來監(jiān)聽瀏覽器的DOMContentLoaded事件。當(dāng)Angular監(jiān)聽到這個(gè)事件時(shí),就會(huì)啟動(dòng)Angular應(yīng)用。
二、初始化階段
Angular開始啟動(dòng)后,它會(huì)查找ng-app指令,然后初始化一系列必要的組件(即$injector、$compile服務(wù)以及$rootScope),接著重新開始解析DOM樹。
三、編譯、鏈接
$compile服務(wù)通過遍歷DOM樹的方式查找有聲明指令的DOM元素。當(dāng)碰到帶有一個(gè)或多個(gè)指令的DOM元素時(shí),它會(huì)排序這些指令(基于指令的priority優(yōu)先級(jí)),然后使用$injector服務(wù)查找和收集指令的compile函數(shù)并執(zhí)行它。
每個(gè)節(jié)點(diǎn)的編譯方法運(yùn)行之后,$compile服務(wù)就會(huì)調(diào)用鏈接函數(shù)。這個(gè)鏈接函數(shù)為綁定了封閉作用域的指令設(shè)置監(jiān)控。這一行為會(huì)創(chuàng)建實(shí)時(shí)視圖。
最后,在$compile服務(wù)完成后,AngularJS運(yùn)行時(shí)就準(zhǔn)備好了。
四、運(yùn)行階段
Angular提供了自己的事件循環(huán)。指令自身會(huì)注冊(cè)事件監(jiān)聽器,因此當(dāng)事件被觸發(fā)時(shí),指令函數(shù)就會(huì)運(yùn)行在AngularJS的$digest循環(huán)中。$digest循環(huán)會(huì)等待$watch表達(dá)式列表,當(dāng)檢測(cè)到模型變化后,就會(huì)調(diào)用$watch函數(shù),然后再次查看$watch列表以確保沒有模型被改變。
一旦$digest循環(huán)穩(wěn)定下來,并且檢測(cè)到?jīng)]有潛在的變化了,執(zhí)行過程就會(huì)離開Angular上下文并且通常會(huì)回到瀏覽器中,DOM將會(huì)被渲染到這里。
將以上過程的關(guān)鍵步驟繪制成一張圖,如下:

以上就是AngularJS 執(zhí)行流程的詳細(xì)介紹,后續(xù)繼續(xù)整理相關(guān)資料,謝謝大家對(duì)本站的支持。
- AngularJS HTML編譯器介紹
- 關(guān)于angularJs指令的Scope(作用域)介紹
- AngularJS Bootstrap詳細(xì)介紹及實(shí)例代碼
- AngularJS中的包含詳細(xì)介紹及實(shí)現(xiàn)示例
- 3個(gè)可以改善用戶體驗(yàn)的AngularJS指令介紹
- AngularJS基礎(chǔ)學(xué)習(xí)筆記之簡(jiǎn)單介紹
- AngularJS 模型詳細(xì)介紹及實(shí)例代碼
- AngularJS中的Promise詳細(xì)介紹及實(shí)例代碼
- Angularjs中ng-repeat-start與ng-repeat-end的用法實(shí)例介紹
- AngularJs每天學(xué)習(xí)之總體介紹
相關(guān)文章
AngularJS中的$parse服務(wù)與$eval服務(wù)用法實(shí)例
這篇文章主要介紹了AngularJS中的$parse服務(wù)與$eval服務(wù)用法,結(jié)合實(shí)例形式分析了AngularJS中$parse服務(wù)與$eval服務(wù)的功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2023-05-05
Angular 4依賴注入學(xué)習(xí)教程之ValueProvider的使用(七)
這篇文章主要給大家介紹了關(guān)于Angular 4依賴注入之ValueProvider使用的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Angular4具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-06-06
Angular6 Filter實(shí)現(xiàn)頁面搜索的示例代碼
這篇文章主要介紹了Angular6 Filter實(shí)現(xiàn)頁面搜索的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Angular2生命周期鉤子函數(shù)的詳細(xì)介紹
這篇文章主要介紹了Angular2生命周期鉤子函數(shù)的詳細(xì)介紹,Angular提供組件生命周期鉤子,可以讓我們更好的開發(fā)Angular應(yīng)用,有興趣的可以了解一下2017-07-07
angular6.x中ngTemplateOutlet指令的使用示例
本篇文章主要介紹了angular6.x中ngTemplateOutlet指令的使用示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
Angular實(shí)現(xiàn)模版驅(qū)動(dòng)表單的自定義校驗(yàn)功能(密碼確認(rèn)為例)
這篇文章主要介紹了Angular實(shí)現(xiàn)模版驅(qū)動(dòng)表單的自定義校驗(yàn)功能(密碼確認(rèn)為例),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05

