第一階段:加載階段
angularJs要運行的話,需要去等待angular.js加載完成,加載完之后呢,angular就會去查找到ng-app這個指令,ng-app在每個應用里面只能出現一次,
它也就相當於我們的main方法,angularjs找到了ng-app之后,就確定了我們應用的邊界在哪里。
所謂的邊界,就是angularjs知道自己要管理哪一塊的內容。
這樣的話,angularjs才可以去啟動起來,加載完成之后,就進入了第二階段
第二階段:編譯階段
這個階段,angular.js會做很多的事情
第一步:首先它會去遍歷dom,把整個dom結構中的所有的指令全部查找出來,然后緩存到內部的緩存里面去
第二步:會根據指令代碼中的template,replace,transclue等對dom結構進行一些變換,
這時候,如果代碼中存在compile函數,angluarjs也會去調用這個函數,如下是自定義的compile
不過一般我們在自定義指令的時候,是不會去自定義compile函數的,因為在調用自定義compile的時候,還要去調用內部默認的compile,否則默認的compile默認的行為就會被覆蓋
第三階段:鏈接階段
鏈接階段又會做些什么事情呢?
首先,每條指令的link指令都會被調用
我們在指令的編寫指令代碼的時候,除了可以寫compile函數以外,還可以寫link自定義函數,
angularjs在找到這個函數以后,angulajs也會去運行link函數,
我們知道,不要在controller或才其他地方操作dom,因為這個思想不符合angularjs的設計思想,
那么dom在哪些地方可以操作呢?我們可以在link中操作dom
那么這個link函數可以做些什么事情呢?
它可以為dom元素綁定一些事件,綁定作用域,比如雙向數據綁定
指令和雙向數據綁定,就是在link這個階段運行的
以上就是angularjs指令執行的三個階段。
以上內容了解即可。無需刻意去記憶。