定义指令时,'controller','link'和'compile'函数之间的区别

定义指令时,'controller','link'和'compile'函数之间的区别

有些地方似乎使用控制器功能用于指令逻辑而其他地方使用链接。角度主页上的选项卡示例使用控制器作为一个,并链接另一个指令。两者有什么区别?



互换的青春
浏览 705回答 3
3回答

心有法竹

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