angular.js(3)--指令的执行过程

1、指令的执行分两个阶段,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函数后续处理


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值