? ? ?$provide告訴angularJs如何創(chuàng)建一個(gè)新的可注入的東西:即服務(wù)。通過$provide的provider方法創(chuàng)建出不同的供應(yīng)商,$provide被注入到config中獲取$provide服務(wù)然后利用不同的供應(yīng)商定義服務(wù)。其中定義供應(yīng)商的辦法:constant,定義常量的,他定義的值不能被改變,它可以被注入到任何地方,但是不能被decorator修飾;value,可以是string、number、function,可以被改變,但是不能注入到config中,可以被decorator修飾;service,一個(gè)可注入的構(gòu)造器,可用于controller中的數(shù)據(jù)共享或者通信;factory,一個(gè)可注入的function;provider,一個(gè)可配置的factory,有一個(gè)$get方法;decorator,用來裝飾其他$provider。
? ? ?使用factory創(chuàng)建服務(wù)的時(shí)候,相當(dāng)于新創(chuàng)建一個(gè)對象,然后在這個(gè)對象上添加屬性,最后返回這個(gè)對象,當(dāng)把這個(gè)服務(wù)注入到控制器的時(shí)候,控制器可以訪問這個(gè)對象上的屬性。使用service創(chuàng)建服務(wù)的時(shí)候,相當(dāng)于用new關(guān)鍵詞進(jìn)行實(shí)例化,因此只需要在this上添加屬性或方法,最后會(huì)自動(dòng)返回this。provider唯一一個(gè)可以創(chuàng)建用來注入到config中的服務(wù)。
? ? ?$digest大致可以理解為整個(gè)ng中的一個(gè)臟檢查循環(huán),$apply大致可以理解為從正常的js跳到angularjs的上下文中其實(shí)也可以將某些東西加入到angular的臟檢查循環(huán)中,$watch監(jiān)聽ng中的相關(guān)屬性方法值的改變。這就要說到我們的雙向綁定了,在整個(gè)angualr中的初始操作的時(shí)候?qū)⑺邢嚓P(guān)元素加入到digest循環(huán)并且綁定watch去監(jiān)聽,當(dāng)有事件進(jìn)入就會(huì)觸發(fā)digest循環(huán)去查看有那些發(fā)生了變化并去作出改變,當(dāng)然如果有一些元素需要加入到循環(huán)中去監(jiān)控這就需要用到apply,或者是說有一些不通過事件去改變元素也需要用到apply,這就做出了兩種 一種事件進(jìn)入自動(dòng)觸發(fā)apply引起digest循環(huán)去watch元素變化,另一種則是手動(dòng)啟動(dòng)apply。
? ? $eval==>$parse大致可以理解為解析界面中的表達(dá)式,eval我們很熟悉就是執(zhí)行js字符串,在ng中呢它則是去走parse將頁面中的那些表達(dá)式(雙向綁定)去解析成我們需要的值,那么接著說$compile大致理解為將一些html字符串解析成dom元素,但是它的解析是根據(jù)從dom樹以及rootscope中的各個(gè)節(jié)點(diǎn)解析出字符串中的各個(gè)動(dòng)作返回去一個(gè)符合ng中統(tǒng)一需求的dom。