为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2019-08-28 16:20:37
定义指令时,'controller','link'和'compile'函数之间的区别有些地方似乎使用控制器功能用于指令逻辑而其他地方使用链接。角度主页上的选项卡示例使用控制器作为一个,并链接另一个指令。两者有什么区别?
查看完整描述

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在评论中提到的那样,您可能希望将范围操作函数放在控制器中,以便与框架的其余部分保持一致。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 699 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信