? ? angular中指令大致可以理解為一種組件芥颈,它具有dom元素,也具有自身的事件處理赚抡,還可以與外部其他進(jìn)行通信爬坑。下面我們說一下整個(gè)指令的構(gòu)成。
? ?name可選的參數(shù)涂臣,指令的名稱盾计。priority優(yōu)先級(jí)售担,在dom中包含多個(gè)指令的時(shí)候,優(yōu)先級(jí)的高低是在compile函數(shù)執(zhí)行之前的排序署辉,高優(yōu)先級(jí)則先編譯執(zhí)行族铆,但是相同優(yōu)先級(jí)并沒有規(guī)定先后。teminal終端哭尝,如果設(shè)置為true那么將會(huì)在dom的指令集合中最后被執(zhí)行哥攘。template字符串或著函數(shù)返回一個(gè)構(gòu)成dom的字符串。replace設(shè)置為true后template將會(huì)替代掉自定義的標(biāo)簽材鹦。templateUrl返回一個(gè)代表html段逝淹,transclude大致理解為將指令包裹的元素放到指令模版的特定位置。
? ?scope代表指令的作用域桶唐,設(shè)置為false代表繼承父作用域栅葡,跟隨父親的值改變;設(shè)置為true表示繼承父作用域并且創(chuàng)建自己的作用域尤泽,跟隨父親的值改變但是自己的改變不影響父親的值欣簇;設(shè)置為對(duì)象的時(shí)候,表示創(chuàng)建一個(gè)獨(dú)立的隔離的作用域坯约,父作用域的值與子作用域的值互不影響熊咽,但是可以通過相關(guān)策略去訪問父作用域的值:@字符串單向綁定父作用域的值,=字符串雙向綁定父作用域的值鬼店,&函數(shù)名綁定父作用域的方法网棍。
? ?controller可以是字符串也可以是個(gè)函數(shù),字符串的時(shí)候?qū)⒆址鳛榭刂破鞯拿指局牵绻莻€(gè)函數(shù)滥玷,需要注意一些特殊的服務(wù),$scope與指令元素相關(guān)聯(lián)的作用域巍棱,$element當(dāng)前指令對(duì)應(yīng)的元素惑畴,$attrs當(dāng)前元素屬性組成的對(duì)象,$transclude嵌入鏈接函數(shù)航徙,實(shí)際被執(zhí)行用來克隆或者操作dom中的函數(shù)如贷。指令的控制器和link函數(shù)可以進(jìn)行互換,區(qū)別在于到踏,控制器主要用來提供可在指令間復(fù)用的行為杠袱,可對(duì)外提供與外部交互的接口,link只能在當(dāng)前指令內(nèi)定義行為窝稿。controllerAs作為controller別名楣富。
? ?require字符串或者數(shù)組,字符串代表另一個(gè)指令的名字伴榔,require的參數(shù)值纹蝴,沒有前綴會(huì)在自身提供的控制器中查找庄萎,如果找不到控制器則報(bào)錯(cuò),前綴塘安?在當(dāng)前指令中查找如果沒有找到則返回null給link糠涛,前綴^如果當(dāng)前指令沒有找到控制器就會(huì)查找父元素的控制器,前綴兼犯?^如果當(dāng)前元素和父元素查找不到控制器則返回null給link函數(shù)忍捡。
? ?compile和link,compile可以返回一個(gè)對(duì)象或者函數(shù)免都,link負(fù)責(zé)將作用域和dom鏈接锉罐。其他的等剩下我找到別的具體的有意思的關(guān)于指令的文檔在作補(bǔ)充吧。