分享人:陈杰超
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.更多讨论
8.参考文献
对于指令,可以把它简单的理解成在特定DOM元素上运行的函数,指令可以扩展这个元素的功能。 例如,一些原生的指令如 ng-disabled , ng-if ,ng-repeat ,ng-click 等。ng-click可以让一个元素能够监听click事件,并在接收到事件的时候执行AngularJS表 达式。正是指令使得AngularJS这个框架变得强大,并且在AngularJs我们可以自己通过directive来创造新的指令。
当在我们的项目中需要实现一些功能,比如,时间筛选、分页的功能,我们最先想到的可能是先去网上找找看,有没有相应的插件可以给我们直接拿来使用。但是插件代码一般十分复杂,无法定位bug进行修改,也无法保证修改后不会出现别的bug,用起来可能不太顺手。像一些实现简单功能的插件,我们可以利用AngularJS中的directive自己写一个指令,进行封装,也可以方便以后重复使用。
怎么将分页封装成指令?
app.directive('pagination', function() {
return {
restrict: String,
priority: Number,
terminal: Boolean,
template:string or Template Function
templateUrl: String,
replace: Boolean,
scope: Boolean or Object,
transclude: Boolean,
controller: String or function() { ... },
controllerAs: String,
require: String,
link: function() { ... },
compile: function() { ... }
});
restrict: String, 可选字符串参数,可以设置这个指令在DOM中可以何种形式被声明,默认为A(属性) 设置为“E”(标签) 设置为"C"(类名) M(注释) <--directive:my-directive expression-->
var app = angular.modeule('myapp',[]);
app.directive('common',function(){
return {
...
controller: function($scope){
this.method1 = function(){
};
this.method2 = function(){
};
},
...
}
});
app.directive('d1',function(){
return {
...
require: '?^common',
link: function(scope,elem,attrs,common){
scope.method1 = common.method1;
..
},
...
}
})
compile: function(tElement, tAttrs, transclude) {
return {
pre: function(scope, iElement, iAttrs, controller) { ... },
post: function(scope, iElement, iAttrs, controller) { ... }
}
// 或者
return function postLink(...) { ... }
}
};
设置compile函数的意义在于:在指令和实时数据被放到DOM中之前修改DOM
分页功能还可以怎么做?
1.还可以用directive自定义指令封装哪些插件
2.directive自定义指令中的scope作用和注意点
参考一: AngularJS权威教程
参考二: Angular简易分页设计
感谢大家观看
by陈杰超