angularjs自定义指令及过滤器介绍 发表于 2017-07-22 | 分类于 Rendering Engine 操作DOM的方式(代码的执行顺序run -> 控制器 -> 自定义指令)语法:模块对象.directive(‘指令名称’,[function(){ return{}}])备注:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455return { // angularjs提供给我们的写DOM操作的地方 link:function(scope,element,attributes){ // 注意传入的参数的顺序,必须是scope,element,attributes // element 指令所在的元素 jqLite对象 //scope 指令所在作用域中的$scope //attributes 指令所在的元素身上的属性集合 element.css('background','red')} template:<div>333333</div>, templateUrl:'./tpl/tpl-1.html' //必须在服务器中打开 transclude:true //告诉angularjs保留指令所在元素内部的原有内容:template:'<div><span ng-transclude></span>333333 </div>' replace:true //在HTML页面中 指令所在的元素不想要了, 我只要保留指令内部定义的模板内容注意: -> 1.当我们把指令所在的元素删除之后 指令的模板必须有一个根元素 -> 2.link函数对应的element参数 会变成 指令模板中的根元素 -> 3.使用replace的时候,"template:<div>333333</div><span></span>"会报错,是因为当删除该元素的标签后,在template的内容中,span和div标签是平级的,因此无法判断出谁作为根元素。 restrict:ECMA + 属性指令 A attributes + 元素指令 E element + 类名指令 C class + 注释指令 M comment 注释指令需要配合replace一起使用**scope**:true 指令本身拥有自己的作用域 但是会继承父级作用域scope:false 指令本身没有自己的作用域 使用的是当前指令所在作用域的 $scopescope:{} 指令本身拥有自己的作用域 不会继承父级的作用域**@ 取当前指令所在元素身上的同名属性对应的值 并且将 值 赋值给当前属性****= 取当前指令所在元素身上的同名属性对应的值 并且将 值 赋值给当前属性**区别:1. @ 需要加大括号通过@取到的数据都是字符串2. = 不需要大括号通过=取到的数据 是 真实的数据类型+ ng-repeat-after 可以理解为循环遍历完成后,自定义的指令。建立指令的四种形式。注意注释标签的填写形式。注意:在定义块级作用域的时候,获取外部控制器的数据的时候,方式,通过双大括号获取的全部是字符串,通过""获取的是数据的本身。### 过滤器**{ 数据 | 过滤器的名字:参数1:参数2 }****currency** 货币过滤器**date** 日期过滤器**filter**过滤器 根据过滤条件 过滤出符合条件的数据(注意:模糊匹配:filter过滤器会去数据中的[每一条数据中的每一个字段中]去查找 有没有 [包含]过滤条件的数据 如果有 留下,精确匹配:filter过滤器会去数据中的[指定的字段中]去查找 有没有 [包含]过滤条件的数据 如果有 留下)**limitTo** 限制过滤器**orderBy** 可以根据某一个字段进行排序 默认 是升序(例如:orderBy:'age' 根据age字段进行升序排列 -> orderBy:'-age' 根据age字段进行降序排列**json**过滤器 可以将数据以良好的格式 展现到页面中#### 自定义过滤器``` js 模块对象.filter('名字',[function(){ return function(value){ // value 就是我们需要处理的数据 // 最后 我们需要将处理的数据return出去 } }])