? ? ?$provide告訴angularJs如何創(chuàng)建一個(gè)新的可注入的東西:即服務(wù)。通過(guò)$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喳瓣,用來(lái)裝飾其他$provider馋贤。
? ? ?使用factory創(chuàng)建服務(wù)的時(shí)候,相當(dāng)于新創(chuàng)建一個(gè)對(duì)象畏陕,然后在這個(gè)對(duì)象上添加屬性配乓,最后返回這個(gè)對(duì)象,當(dāng)把這個(gè)服務(wù)注入到控制器的時(shí)候惠毁,控制器可以訪問(wèn)這個(gè)對(duì)象上的屬性犹芹。使用service創(chuàng)建服務(wù)的時(shí)候,相當(dāng)于用new關(guān)鍵詞進(jìn)行實(shí)例化鞠绰,因此只需要在this上添加屬性或方法腰埂,最后會(huì)自動(dòng)返回this。provider唯一一個(gè)可以創(chuàng)建用來(lái)注入到config中的服務(wù)蜈膨。
? ? ?$digest大致可以理解為整個(gè)ng中的一個(gè)臟檢查循環(huán)屿笼,$apply大致可以理解為從正常的js跳到angularjs的上下文中其實(shí)也可以將某些東西加入到angular的臟檢查循環(huán)中,$watch監(jiān)聽(tīng)ng中的相關(guān)屬性方法值的改變翁巍。這就要說(shuō)到我們的雙向綁定了驴一,在整個(gè)angualr中的初始操作的時(shí)候?qū)⑺邢嚓P(guān)元素加入到digest循環(huán)并且綁定watch去監(jiān)聽(tīng),當(dāng)有事件進(jìn)入就會(huì)觸發(fā)digest循環(huán)去查看有那些發(fā)生了變化并去作出改變灶壶,當(dāng)然如果有一些元素需要加入到循環(huán)中去監(jiān)控這就需要用到apply蛔趴,或者是說(shuō)有一些不通過(guò)事件去改變?cè)匾残枰玫絘pply,這就做出了兩種 一種事件進(jìn)入自動(dòng)觸發(fā)apply引起digest循環(huán)去watch元素變化,另一種則是手動(dòng)啟動(dòng)apply孝情。
? ? $eval==>$parse大致可以理解為解析界面中的表達(dá)式鱼蝉,eval我們很熟悉就是執(zhí)行js字符串,在ng中呢它則是去走parse將頁(yè)面中的那些表達(dá)式(雙向綁定)去解析成我們需要的值箫荡,那么接著說(shuō)$compile大致理解為將一些html字符串解析成dom元素魁亦,但是它的解析是根據(jù)從dom樹以及rootscope中的各個(gè)節(jié)點(diǎn)解析出字符串中的各個(gè)動(dòng)作返回去一個(gè)符合ng中統(tǒng)一需求的dom。