angular.js(3)--指令的执行过程
2016-10-07 10:43
681 查看
1、指令的执行分两个阶段,compile和link函数
自定义link
自定义compile
结果:
你好
你好
你好
你好
你好
你好
同时有link和compile
这时link是没有执行的,因为compile返回的函数作为link,自己定义的link不起作用,所以一般不同时出现
2、compile和link的区别
1)compile函数的作用是对指令的模板进行转换
2)link的作用是在模型和视图之间建立关联,包括在元素上注册事件监听器
3)scope在链接阶段才会被绑定到元素上,因此compilce阶段操作scope会报错
4)对于同一个指令的多个实例,compilce只会执行一次,而link对于指令的每个实例都会执行一次
5)一般情况下我们只要编写link函数
6)注意,如果你编写了自定义的complice函数,自定义的linK函数无效,因为compile函数应该返回一个link函数后续处理
自定义link
var app = angular.module("app",[]); app.directive("hello",function(){ return { restrict:"E", template:"<div>hello everyone!</div>", replace:true, link:function(scope,element,attr,controller){ element.on("mouseenter",function(){ console.log("i am link...."); }) } } })
<!DOCTYPE html> <html ng-app="app"> <head> <meta charset="utf-8"> <title>compile and link</title> <script src="../angular-1.5.8/angular.js"></script> <script src="comAndLink.js"></script> </head> <body> <hello></hello> </body> </html>
自定义compile
var app = angular.module("app",[]); app.directive("myhello",function(){ return{ restrict:"A", compile:function(element,attr,transclude){ console.log("enter compile..."); var tpl = element.children().clone(); for(var i=0;i<attr.myhello;i++){ element.append(tpl.clone()); } return function(scope,element,attr,controller){//必须,未来作为link console.log("指令链接。。。"); } } } })
<!DOCTYPE html> <html ng-app="app"> <head> <meta charset="utf-8"> <title>compile</title> <script type="text/javascript" src="../angular-1.5.8/angular.js"></script> <script type="text/javascript" src="comAndLink.js"></script> </head> <body> <div myhello="5"> <p>你好</p> </div> </body> </html>
结果:
你好
你好
你好
你好
你好
你好
同时有link和compile
app.directive("myhello",function(){ return{ restrict:"A", compile:function(element,attr,transclude){ console.log("enter compile..."); var tpl = element.children().clone(); for(var i=0;i<attr.myhello;i++){ element.append(tpl.clone()); } return function(scope,element,attr,controller){ console.log("指令链接。。。"); } }, link:function(){ console.log("link.....") } } })
这时link是没有执行的,因为compile返回的函数作为link,自己定义的link不起作用,所以一般不同时出现
2、compile和link的区别
1)compile函数的作用是对指令的模板进行转换
2)link的作用是在模型和视图之间建立关联,包括在元素上注册事件监听器
3)scope在链接阶段才会被绑定到元素上,因此compilce阶段操作scope会报错
4)对于同一个指令的多个实例,compilce只会执行一次,而link对于指令的每个实例都会执行一次
5)一般情况下我们只要编写link函数
6)注意,如果你编写了自定义的complice函数,自定义的linK函数无效,因为compile函数应该返回一个link函数后续处理
相关文章推荐
- Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
- angularjs directive指令 link在渲染完成之后执行
- angular.js学习(1)--指令执行机制
- angular核心原理解析3:指令的执行过程
- angularjs directive 指令 学习笔记
- Angularjs+Bootstrap实现分页指令
- AngularJS ng-app 指令实例详解
- 关于js的callback回调函数以及嵌套回调函数的执行过程理解
- JS,Javascript加载与函数执行过程
- js的执行过程
- pop指令的执行过程
- 计算机的指令执行过程分析
- AngularJS directive指令之require部分
- AngularJS ng-open 指令
- AngularJs ng-change事件/指令(转)
- angular.js基础(1)--指令directive
- 汇编语言-第二章 寄存器(CPU工作原理)之执行指令过程(二)
- node.js多个异步过程中判断执行是否完成的解决方案
- angularJs driective指令小实例
- Angular.js中的指令——易懂全解析