directive:中文是”指令”的意思。
1 | angular.module('myApp', []) |
指令的一些技巧:
1.指令的复用
上面学会了如何在link()中调用controller中的方法,那指令在不同的地方如何调用不同的方法呢?
1 | <!-- 为自定义指令添加了一个自定义属性,自定义属性绑定了controller中的方法 --> |
1 | .controller('myCtrl1', function() { |
1 | .directive('myDirective', function() { |
指令执行的机制:
1.加载阶段
加载angular.js,找到ng-app指令,确定应用边界。
2.编译阶段(compile)
(1)遍历dom,找到所有的指令
(2) 根据指令的属性,如replace、template等转换为dom结构
(3)如果指令中存在compile( )则调用。
但一般不在指令内部写compile(),因为要写的话里面还需要调用angular默认的compile()
3.链接阶段(link)
(1)对每一条指令运行link()
(2)link函数一般用来操作dom、绑定事件监听器
比如:指令和数据间的操作,就是在link()里面执行的。
tip:
1.compile()用于对模板自身进行转换,而link()负责在模型和视图之间进行动态关联;
2.compile()仅在编译阶段运行一次,而对于指令的每个实例,link()都会执行一次;
3.如前所述,大多数时候我们不写compile(),只写link();以下几点先做留存,没有理解:
4.compile()可以返回preLink()与postLink(),而link()只会返回postLink();
5.如果需要修改dom,应该在postLink()中修改,在preLink()中修改会出错;
6.作用域在链接阶段才会绑定到编译之后的link()上;