3 回答

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