compile编译阶段,会返回link函数,如果同时定义了compile和link,只会执行compile
link又分为pre-link与post-link
compile负责对指令的模板进行转换,link负责将scope于dom进行连接,模型与视图建立连接,包括在元素上注册监听事件,对于同一个指令的多个实例,compile只会执行一次,而compile会每个实例执行一次。
compile:使用compile函数可以改变原始的dom(template element),在ng创建原始dom实例以及创建scope实例之前,不传递scope
pre-link:使用pre-link函数可以运行一些业务代码在ng执行完compile函数之后,但是在它所有子指令的post-link函数将要执行之前。scope对象以及element实例将会做为参数传递给pre-link函数:
post-link:使用post-link函数来执行业务逻辑,在这个阶段,它已经知道它所有的子指令已经编译完成并且pre-link以及post-link函数已经执行完成。这就是被认为是最安全以及默认的编写业务逻辑代码的原因.