3 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
我將稍微擴(kuò)展你的問題,并包括編譯功能。
編譯函數(shù) - 用于模板 DOM操作(即操作tElement = template元素),因此適用于與指令關(guān)聯(lián)的模板的所有DOM克隆的操作。(如果還需要鏈接函數(shù)(或前后鏈接函數(shù)),并且定義了編譯函數(shù),則編譯函數(shù)必須返回鏈接函數(shù),因?yàn)?code>'link'如果
'compile'
定義了屬性,則忽略該屬性。)鏈接函數(shù) - 通常用于注冊偵聽器回調(diào)(即
$watch
作用域上的表達(dá)式)以及更新DOM(即,操作iElement =單個(gè)實(shí)例元素)。它在克隆模板后執(zhí)行。例如,在an中<li ng-repeat...>
,在將<li>
模板(tElement)克隆到該特定<li>
元素(到iElement)之后執(zhí)行鏈接功能。A$watch
允許指令通知范圍屬性更改(范圍與每個(gè)實(shí)例關(guān)聯(lián)),這允許指令將更新的實(shí)例值呈現(xiàn)給DOM。controller函數(shù) - 當(dāng)另一個(gè)指令需要與該指令交互時(shí)必須使用。例如,在AngularJS主頁上,pane指令需要將其自身添加到tabs指令維護(hù)的作用域,因此tabs指令需要定義窗格指令可以訪問/調(diào)用的控制器方法(思考API)。
有關(guān)tab和pane指令的更深入說明,以及tabs指令使用this
(而不是on$scope
)在其控制器上創(chuàng)建函數(shù)的原因,請參閱AngularJS控制器中的'this'vs $ scope。
通常,您可以將方法$watches
等放入指令的控制器或鏈接函數(shù)中??刂破鲗⑹紫冗\(yùn)行,這有時(shí)很重要(當(dāng)ctrl和link函數(shù)使用兩個(gè)嵌套指令運(yùn)行時(shí),請參閱此小提琴。正如Josh在評論中提到的那樣,您可能希望將范圍操作函數(shù)放在控制器中,以便與框架的其余部分保持一致。
添加回答
舉報(bào)