标签:style http color io os 使用 ar java for
[20140917]Angular:如何编写一个指令
AngularJS是一个用JavaScript编写的客户端MVC框架,它运行于Web浏览器,能够极大的帮助我们(开发者)编写模块化,单页面,Ajax风格的Web Applications。
PS:AngularJS适合开发CRUD的SPA
Angular Directive是构建在DOM元素(属性、标签名、注释和CSS类)上的标记,告诉AngularJS的HTML编译器($compile) 附加指定的行为到元素或者甚至变换这个元素和它的子集。
PS:通过扩展HTML标签的方式提供可复用的web组件
PS2:指令的作用:提供语义化标签
var directiveModule=angular.module(‘Newkit.negHotkeys‘);
directiveModule.directive(‘negHotkeys‘,function(injectables){
var directiveDefineObject={
restrict:(string),
priority:(number),
template:(string),
templateUrl:(string),
replace:(bool),
transclude:(bool),
scope:(bool or object),
controller:(function),
require:(string),
link:(function)
compile:(function)
};
return directiveDefineObject;
});
/*demo1指令定义*/
angular.module(‘app‘).directive(‘demo1‘,function(){
return {
restrict:‘AE‘,/*标签或者属性*/
template:‘<div>Hello</div>‘,
replace:true
}
});
/*使用*/
<html ng-app="app">
<head>...</head>
<body>
<demo1></demo1>
<div data-demo1></div>
</body>
</html>
/*结果(指令将满足条件的元素替换为了新的内容)*/
<body>
<div>Hello World!</div>
<div demo1="">Hello World!</div>
</body>
/*demo2指令定义*/
angular.module(‘app.directive.demo2‘,[]).directive(‘demo2‘,function(){
return {
restrict:‘E‘,
template:‘<div>This is Demo2<div ng-transclude></div></div>‘,
transclude:true
}
});
/*使用*/
<demo2>
<span>原始的内容,</span><br/>
<span>还会在这里。</span>
</demo2>
<demo2></demo2>
/*页面生成的HTML*/
<demo2>
<div>This is Demo2
<div ng-transclude="">
<span class="ng-scope">原始的内容,</span><br class="ng-scope">
<span class="ng-scope">还会在这里。</span>
</div>
</div>
</demo2>
<demo2>
<div>This is Demo2
<div ng-transclude=""></div>
</div>
</demo2>
/*指令*/
angular.module(‘app.directive.demo3‘,[]).directive(‘demo3Link‘,function(){
return {
restrict:‘E‘,
template:‘<div>This is Demo3Link</div>‘,
link:function(scope,iElement,iAttrs){
iElement.html(‘<div>good link</div>‘);
}
}
}).directive(‘demo3Compile‘,function(){
return {
restrict:‘E‘,
template:‘<div>This is Demo3Compile</div>‘,
compile:function(tElement,tAttrs,transclude){
tElement.html(‘<div>test demo3 compile</div>‘);
return function(scope,iElement,iAttrs){
//iElement.html(‘<div>good compile</div>‘);
};
}
}
});
/*使用*/
<demo3-link></demo3-link>
<demo3-link></demo3-link>
<demo3-compile></demo3-compile>
/*页面生成的HTML*/
<demo3-link><div>good link</div></demo3-link>
<demo3-link><div>good link</div></demo3-link>
<demo3-compile><div>test demo3 compile</div></demo3-compile>
compile用于在编译期处理模板内容,并能设置preLink和postLink函数,此时将不能设置link函数,代码如下:
compile:function(tElement,tAttrs,transclude){
tElement.html(‘<div>test demo3 compile</div>‘);
return {
pre:function preLink(scope,iElement,iAttrs){
console.log(‘preLink‘);
},
post:function postLink(scope,iElement,iAttrs){
console.log(‘postLink‘);
}
};
}
link用于对替换后的元素进行操作,如果参数是iElement。
/*代码在这里*/
angular.module(‘app.directive.demo4‘,[]).directive(‘demo4‘,function(){
return {
restrict:‘E‘,
template:‘<fieldset><legend>计算两个数之和</legend>‘ +
‘<div><input type="text" ng-model="num1">+<input type="text" ng-model="num2">=<span>{{total}}</span></div>‘ +
‘</fieldset>‘,
replace:true,
link:function(scope,iElement,iAttrs){
scope.num1=0;
scope.num2=0;
scope.total=0;
scope.$watch(‘num1+num2‘,function(to,from){
scope.total=+scope.num1+(+scope.num2)
})
}
}
});
/*HTML在这里*/
<demo4></demo4>、
/*效果请自行测试*/
可以利用指令完成特定的功能了。
标签:style http color io os 使用 ar java for
原文地址:http://www.cnblogs.com/humin/p/4011470.html