3 回答
TA贡献1866条经验 获得超5个赞
我将稍微扩展你的问题,并包括编译功能。
编译函数 - 用于模板 DOM操作(即操作tElement = template元素),因此适用于与指令关联的模板的所有DOM克隆的操作。(如果还需要链接函数(或前后链接函数),并且定义了编译函数,则编译函数必须返回链接函数,因为
'link'
如果'compile'
定义了属性,则忽略该属性。)链接函数 - 通常用于注册侦听器回调(即
$watch
作用域上的表达式)以及更新DOM(即,操作iElement =单个实例元素)。它在克隆模板后执行。例如,在an中<li ng-repeat...>
,在将<li>
模板(tElement)克隆到该特定<li>
元素(到iElement)之后执行链接功能。A$watch
允许指令通知范围属性更改(范围与每个实例关联),这允许指令将更新的实例值呈现给DOM。controller函数 - 当另一个指令需要与该指令交互时必须使用。例如,在AngularJS主页上,pane指令需要将其自身添加到tabs指令维护的作用域,因此tabs指令需要定义窗格指令可以访问/调用的控制器方法(思考API)。
有关tab和pane指令的更深入说明,以及tabs指令使用this
(而不是on$scope
)在其控制器上创建函数的原因,请参阅AngularJS控制器中的'this'vs $ scope。
通常,您可以将方法$watches
等放入指令的控制器或链接函数中。控制器将首先运行,这有时很重要(当ctrl和link函数使用两个嵌套指令运行时,请参阅此小提琴。正如Josh在评论中提到的那样,您可能希望将范围操作函数放在控制器中,以便与框架的其余部分保持一致。
添加回答
举报