angular学习笔记(一)
angular学习笔记(一):angular指令
angular指令的优先级
angular指令中大部分指令都是忽略了这个参数,默认值为0,但是在某些情况下设置这个参数还是非常有用的,比如ng-repeat指令的参数设置为1000,那么在统一元素上他就会比别的指令先执行,那么他的优先级就是最高的。
但是如果两个指令的优先级参数是一样的,那么就按照指令的顺序来先后执行,像ng-repeat在所有指令中的优先级是最高的,另外ng-init指令一般会以非零的优先级执行,如果想要先执行你想要的指令,那就要给这个参数设置一个高一点的值(一般非零即可,100之类的)
但是怎么设置这个参数呢?
angular.module('myApp',[]).directive('myDirective',function(){
return {
priority:100;//这个参数就是设置这个指令的优先级的
}
})
angular指令的布尔参数(terminal)
这个参数有两个值,true或false,假如这个指令的这个参数的值为false的话就基本没什么问题,当然默认就是true,但是如果这个值设置成了false,那么比这个指令优先级低的指令就不会在执行,所以当一个指令的这个布尔值设置为false,那么比这个指令优先级高的话或者相同的话没什么影响
angualr指令隔离作用域的绑定策略
1、'@'策略,就是将本地作用域和DOM属性中的值绑定在一起(属性值是父作用域里面的属性),eg:
<body ng-app="myApp">
<div my-title='sujunfei' my-directive>
</div>
<script>
var app=angular.module('myApp',[]);
app.directive('myDirective',function(){
return {
restrict:'EA',
template:'<div>{{myTitle}}</div>',//假如里面的不是myTitle,而是title,那么下面的测,策略就是'@myTitle'
scope:{
myTitle:'@'
}
}
})
</script>
</body>
这里没有体现出为什么非要是父作用域的属性
<div my-title='sujunfei' ng-controller="myController">
<div my-directive>
</div>
</div>
假如html结构变成上面那样,那么就不会引用到DOM中的属性my-title中的值
2、'='策略,'='策略值不是简单的一个字符串是一个对象,具体用法同上面的@差不多,就是一个是字符串,一个是对象
<body ng-app="myApp">
<div ng-controller="myController">
<input type="text" ng-model="test">
<my-directive model='test'></my-directive>
</div>
<script>
var app=angular.module('myApp',[]);
app.controller('myController',function($scope){
});
app.directive('myDirective',function(){
return {
restrict:'EA',
template:'<input ng-model="model" />',
scope:{
model:'='
}
}
})
</script>
</body>
这个例子实现了两个输入框的双向绑定
3、'&'策略,就是对父作用域进行绑定,将其中的元素属性封装成一个函数,无论这个属性值是一个字符串还是一个对象还是函数方法,都会被封装成一个无参函数
<body ng-app="myApp">
<div ng-controller="myController">
<div get-name='name' my-directive>
</div>
</div>
<script>
var app=angular.module('myApp',[]);
app.controller('myController',function($scope){
$scope.name='sujunfei';
});
app.directive('myDirective',function(){
return {
restrict:'EA',
template:'<div>{{myname}}</div>',
scope:{
getName:'&'
},
controller:function($scope){
$scope.myname=$scope.getName();
}
}
})
</script>
</body>
当然你也可以给他传一个参数
<body ng-app="myApp">
<div ng-controller="myController">
<div ng-model='name' get-name='showName(name)' my-directive>
</div>
</div>
<script>
var app=angular.module('myApp',[]);
app.controller('myController',function($scope){
$scope.showName=function(name){
console.log(name);
}
});
app.directive('myDirective',function(){
return {
restrict:'EA',
template:'<input type="text" ng-model="name" />\
<button ng-click="getName({name:name})">点击显示</button>\
',
scope:{
getName:'&'
}
}
})
</script>
</body>

浙公网安备 33010602011771号