在文档中,他们解释:
>编译和链接功能用于角度的不同阶段
周期
>控制器在指令之间共享。
但是,对我来说不清楚,哪种代码应该去哪里。例如。:
我可以在编译中创建函数,并将它们附加到链接中的作用域。或者我只将功能附加到控制器中的范围?如果每个指令都有自己的控制器,如何在指令之间共享控制器?真的是控制器共享还是只是范围属性?
这是Angular实际编译你的指令的阶段。对于给定指令的每次引用,此编译函数只调用一次。例如,假设您正在使用ng-repeat指令。 ng-repeat将必须查找它附加到的元素,提取它附加到的html片段并创建一个模板函数。
如果你已经使用HandleBars,下划线模板或等同物,它像编译他们的模板来提取出一个模板函数。对于这个模板函数,你传递数据,函数的返回值是html,数据在正确的地方。
编译阶段是Angular中返回模板函数的步骤。角模板函数称为链接函数。
链接阶段:
链接阶段是将数据($ scope)附加到链接函数,它应该返回链接的html。因为指令还指定了这个html的位置或者它改变了什么,它已经很好去了。这是要对链接的html(即已经附加了数据的html)进行更改的函数。如果你在链接函数中编写代码,它通常是后链接函数(默认情况下)。它是一种回调,在链接函数将数据与模板链接后调用。
控制器:
控制器是一个放置某些指令特定逻辑的地方。这个逻辑也可以进入链接函数,但是你必须把这个逻辑放在范围上,使它“共享”。问题是,你将然后腐败的范围与你的指令东西,这不是真正的预期。那么,如果两个指令想要彼此交谈/相互合作,什么是替代方法?当然,你可以把所有的逻辑放到一个服务,然后使这两个指令依赖于服务,但只是带来一个依赖。另一种方法是为这个范围提供一个控制器(通常是隔离范围?),然后当该指令“需要”另一个指令时,该控制器被注入另一个指令。有关示例,请参阅angularjs.org第一页上的选项卡和窗格。