84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
为什么有的要写在link里面,有的要写在controller里面?! 如果希望在module中设置一个子scope,但不用directive,这时候能否用link? (比如说用ngRoute时候的ng-view部分,可否用link) controller可以和服务器端通信是吧,link好像不干这事情?还是只是我没见到过?
认证高级PHP讲师
关于directive里的link和controller区别? 1、执行顺序:先controller后link 2、何时使用controller:一般场景下都不想要使用controller,只需要把逻辑写在link中就可以了;用controller的场景就是该指令(假设为a)会被其他指令(假设为b)require的时候,这样就会在b指令的link函数中传入这个controller(如果require多个的话,传入的是一个数组,数组中存放的是每一个require的指令对应的controller),目的很显然是为了指令间进行交流的。
关于非directive的scope能否用link? 在指令中才存在调用link的时候,也就是说link是该指令在compile之后和scope进行绑定的时候调用的。 那只有在指令定义的那个地方用到link了,其他地方也可以用,例如做弹出框的时候就需要,拿到模板tpl,然后调用var linkFn = $compile(angular.element(tpl));此时返回的就是一个link的函数,然后linkFn(scope),这里的scope是你需要指定的scope,可以是新创建的,也可以是已经存在的。
var linkFn = $compile(angular.element(tpl));
linkFn(scope)
link 和 controller 是完全不相干的概念。
对于一个特定的drective, controller可以是没有的, link比较复杂,基本上可以看做是$compile的一个回调 angularjs 对于drictive 必须是首先编译 ---> 调用$compile生成dom对象---> 调用link绑定到相应scope ---> 触发 $digest (之后还有好多步骤,才能更新一个driective, 不同对象的编译次数和时机都不一样,具体去看api)
总之 compile, link 之类都是针对driective来说的,如果题主对jquery熟的话,那么compile过程就相当于 创建一些dom对象( $('<a class = //.... ') ) link则是$().append or prepend 之类的dom操作。
那么scope是啥? scope是绑定模型用的。 controller是啥? 给scope 加上方法(逻辑)用的。
link 是用来把directive嵌入dom的angularjs提供的一个切面机制, controller 是 scope中watch的事件被触发时的context, 完全不同的东西。
针对最后一个问题, 只要是可以运行的函数都能执行你写的代码,但是一般来说 1) 把你的业务逻辑写在controller里, 而且不要写在driective自己的controller里, 而是在它绑定的scope的那个controller上
2) controller里面别出现dom操作,特别是prepend,append 这些, 因为未被编译过的dom对象是没法被watch的, angularjs不会监视那些后来加入又没有被编译过的dom对象。
关于directive里的link和controller区别?
1、执行顺序:先controller后link
2、何时使用controller:一般场景下都不想要使用controller,只需要把逻辑写在link中就可以了;用controller的场景就是该指令(假设为a)会被其他指令(假设为b)require的时候,这样就会在b指令的link函数中传入这个controller(如果require多个的话,传入的是一个数组,数组中存放的是每一个require的指令对应的controller),目的很显然是为了指令间进行交流的。
关于非directive的scope能否用link?
在指令中才存在调用link的时候,也就是说link是该指令在compile之后和scope进行绑定的时候调用的。
那只有在指令定义的那个地方用到link了,其他地方也可以用,例如做弹出框的时候就需要,拿到模板tpl,然后调用
var linkFn = $compile(angular.element(tpl));
此时返回的就是一个link的函数,然后linkFn(scope)
,这里的scope是你需要指定的scope,可以是新创建的,也可以是已经存在的。link 和 controller 是完全不相干的概念。
对于一个特定的drective, controller可以是没有的, link比较复杂,基本上可以看做是$compile的一个回调 angularjs 对于drictive 必须是首先编译 ---> 调用$compile生成dom对象---> 调用link绑定到相应scope ---> 触发 $digest (之后还有好多步骤,才能更新一个driective, 不同对象的编译次数和时机都不一样,具体去看api)
总之 compile, link 之类都是针对driective来说的,如果题主对jquery熟的话,那么compile过程就相当于 创建一些dom对象( $('<a class = //.... ') ) link则是$().append or prepend 之类的dom操作。
那么scope是啥? scope是绑定模型用的。
controller是啥? 给scope 加上方法(逻辑)用的。
link 是用来把directive嵌入dom的angularjs提供的一个切面机制, controller 是 scope中watch的事件被触发时的context, 完全不同的东西。
针对最后一个问题, 只要是可以运行的函数都能执行你写的代码,但是一般来说
1) 把你的业务逻辑写在controller里, 而且不要写在driective自己的controller里, 而是在它绑定的scope的那个controller上
2) controller里面别出现dom操作,特别是prepend,append 这些, 因为未被编译过的dom对象是没法被watch的, angularjs不会监视那些后来加入又没有被编译过的dom对象。