AngularJs 指令 directive中link,controller 的区别

时间:2022-11-29 20:38:37

其实严格来讲,link和controller是完全不同的概念,这里讲区别有点牵强。

angular指令中,带有link和controller两个函数,很多人在写指令的时候不知道是写在link里 还是controller中。

其实这两个函数很大程度上牵扯到angular对于页面dom的加载时候对于两个函数的调用,可以理解为 link多涉及页面的dom结构 ,可以看做是$compile的一个回调 angularjs 对于drictive 必须是首先编译 ---> 调用$compile生成dom对象---> 调用link绑定到相应scope ---> 触发 $digest (之后还有好多步骤,才能更新一个driective, 不同对象的编译次数和时机都不一样,具体去看api)。然而controller多牵扯到这个指令涉及的公共对外逻辑,方法。

所以在使用的时候,一般场景下都不想要使用controller,只需要把逻辑写在link中就可以了;用controller的场景就是该指令(假设为a)会被其他指令(假设为b)require的时候,这样就会在b指令的link函数中传入这个controller(如果require多个的话,传入的是一个数组,数组中存放的是每一个require的指令对应的controller),目的很显然是为了指令间进行交流的。