在与和函数进行 最初的 斗争并阅读了很多有关它们的内容之后,我认为现在我有了答案。
link``controller
首先让 理解 ,
简而言之,角度指令如何工作:
- 我们从模板开始(作为字符串或加载到字符串)
var templateString = '<div my-directive>{{5 + 10}}</div>';- 现在,将
templateString
其包装为 角形元素
var el = angular.element(templateString);
- 使用
el
,现在我们用$compile
进行编译,以获取 链接 功能。
var l = $compile(el)
这是发生了什么事
* `$compile` 遍历整个模板并收集其识别的所有指令。* 所发现的所有指令均以 **递归** 方式 **编译** 并`link`收集其功能。* 然后,所有`link`函数都包装在一个新`link`函数中,并以形式返回`l`。
- 最后,我们
scope
为该l
(链接)函数提供函数,该函数进一步使用thisscope
和它们的相应元素执行包装的链接函数。
l(scope)
- 这会将
template
作为新节点添加到,DOM
并进行调用controller
,这会将其监视添加到与DOM中的模板共享的 范围 。
比较 compile vs link 和 controller :
每个指令只能 编译 一次, 链接 功能将保留以供重复使用。因此,如果某条指令适用于指令的所有实例,则应在指令的
compile
功能内执行。现在,在编译之后,我们有了
link
将 模板 附加到 DOM时 执行的功能。因此,因此我们执行特定于指令每个实例的所有操作。例如: 附加事件 , 基于范围更改模板 等。最后,当指令在上运行时(附加后),该 控制器 应处于活动状态和反应状态
DOM
。因此:
(1)设置带有链接的视图[ V* ](即模板)后。$scope
是我们的[ M ],$controller
也是我们在 MVC中的
[ C ] *
(2)通过设置手表 来 利用 $ scope 进行 2向 绑定。
(3)
$scope期望在控制器中添加监视,因为这是在运行时监视模板。
(4)最后,
controller还用于能够在相关指令之间进行通信。(
myTabs例如https://docs.angularjs.org/guide/directive中的示例)
(5)的确,我们也可以在
link函数中完成所有这些操作,但它只 涉及关注点分离 。



