AngularJS1.X学习笔记7-过滤器

  最近参加笔试被虐成狗了,感觉自己的算法太弱了。但是还是先花点事件将这个AngularJS学习完。今天学习filter

一、内置过滤器

  (1)过滤单个数据值

  

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
    <meta charset="UTF-8">
    <title>内置过滤器-过滤单个数据值</title>
</head>
<body ng-controller="tableCtrl">
    <h1>今天是:{{now|date:"dd MMMM yyyy"}}</h1>
    <table width="100%">

        <tr>
            <td>name</td>
            <td>cat</td>
            <td>price</td>
            <td>expiry</td>
            <td>json</td>
        </tr>

        <tr ng-repeat="item in products">
            <td>{{item.name}}</td>
            <td>{{item.cat | uppercase}}</td>
            <td>{{item.price | currency:"¥"}}</td>
            <td>{{item.expiry | number:0}}</td>
            <td>{{item | json}}</td>
        </tr>
    </table>

    <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
    <script type="text/javascript">
        angular.module("myApp",[])
        .controller("tableCtrl",function($scope){
            $scope.products = [
                {name:"苹果",cat:"水果",price:5.0,expiry:100000000},
                {name:"香蕉",cat:"水果",price:6.0,expiry:9},
                {name:"桃子",cat:"水果",price:7.0,expiry:7},

                {name:"22",cat:"yy",price:5.0,expiry:5},
                {name:"33",cat:"yy",price:9.0,expiry:6},
                {name:"44",cat:"yy",price:4.0,expiry:2},
                {name:"55",cat:"yy",price:8.0,expiry:4},

                {name:"ww",cat:"tt",price:4.0,expiry:7},
                {name:"qq",cat:"tt",price:3.0,expiry:9},

            ];

                var now = new Date();
                $scope.now = now;

        });
    </script>

</body>
</html>

  上例中用到了常见的内置过滤单个数据值的过滤器,下面一一说明。

  • currency:格式化货币值,可以在后面加:跟参数,指定货币符号,默认为$
  • number:格式化数字,后面跟:加参数,表示保留的小数位数,它会在千分为加上逗号
  • date:参数为日期格式,可以将Date对象或者毫秒数格式化为指定的格式
  • uppercase:字母大写
  • lowercase:字母小写
  • json:将javascript对象转换为json对象

  (2)过滤集合

  • 限制数量   
<tr ng-repeat="item in products | limitTo:3">

  表示只显示products的前3个项,参数为负数表示从最后一个往前算。

  •  选取项
<tr ng-repeat="item in products | filter:(cat:‘水果‘)">

  用filter可以过滤出返回true的项,给个函数也是可以的,例如下面

<tr ng-repeat="item in products | filter:selectItems">

$scope.selectItems = function(item){
     return item.cat == "tt" || item.cat == "yy";
}
  • 排序
<tr ng-repeat="item in products | orderBy:‘price‘">

  默认是升序排列,加个-号则降序,当然也可以对多个谓词进行排序,像这个样子

<tr ng-repeat="item in products | orderBy:[‘expiry‘,‘-price‘]‘">

  注意那个小小的引号。

二、创建自定义过滤器

  1、单值过滤

  

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
    <meta charset="UTF-8">
    <title>自定义-过滤单个数据值</title>
</head>
<body ng-controller="tableCtrl">
    <h1>今天是:{{now|date:"dd MMMM yyyy"}}</h1>
    <table width="100%">

        <tr>
            <td>name</td>
            <td>cat</td>
            <td>price</td>
            <td>expiry</td>
            <td>json</td>
        </tr>

        <tr ng-repeat="item in products">
            <td>{{item.name | labelCase:"###"}}</td>
            <td>{{item.cat | uppercase}}</td>
            <td>{{item.price | currency:"¥"}}</td>
            <td>{{item.expiry | number:0}}</td>
            <td>{{item | json}}</td>
        </tr>
    </table>

    <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
    <script type="text/javascript">
        angular.module("myApp",[])
        .controller("tableCtrl",function($scope){
            $scope.products = [
                {name:"苹果",cat:"水果",price:5.0,expiry:100000000},
                {name:"香蕉",cat:"水果",price:6.0,expiry:9},
                {name:"桃子",cat:"水果",price:7.0,expiry:7},

                {name:"22",cat:"yy",price:5.0,expiry:5},
                {name:"33",cat:"yy",price:9.0,expiry:6},
                {name:"44",cat:"yy",price:4.0,expiry:2},
                {name:"55",cat:"yy",price:8.0,expiry:4},

                {name:"ww",cat:"tt",price:4.0,expiry:7},
                {name:"qq",cat:"tt",price:3.0,expiry:9},

            ];

                var now = new Date();
                $scope.now = now;

        })
        .filter("labelCase",function(){
            return function(value,pre){
                if(angular.isString(value)){
                    return pre+value;
                }else{
                    return value;
                }
            }
        });
    </script>

</body>
</html>

  我们用filter方法创建自定义过滤器,filter方法有两个参数,第一个指定过滤器的名称,第二个是一个工厂函数,在工厂函数中返回一个工人函数,工人函数的第一个参数是当前值,其他参数是自定义参数。在本例中定义了一个labelCase过滤器,它的作用是在字符串前面加上自定义的前缀。

  (2)创建一个集合过滤器。

  跟过滤单个值的过滤器差不多,但是它要求传入的是一个数组,返回的还是一个数组

  

.filter("skip",function(){
            return function(data,num){
                if(angular.isArray(data)&&angular.isNumber(num)){
                    if(num>data.length || num<1){
                        return data;
                    }else{
                        return data.slice(num);
                    }
                }else{
                    return data;
                }
            }
        });

  这个过滤器表示的是跳过开头的几个数据项不显示。

  (3)站在巨人的肩膀上

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
    <meta charset="UTF-8">
    <title>自定义-过滤单个数据值</title>
</head>
<body ng-controller="tableCtrl">
    <h1>今天是:{{now|date:"dd MMMM yyyy"}}</h1>
    <table width="100%">

        <tr>
            <td>name</td>
            <td>cat</td>
            <td>price</td>
            <td>expiry</td>
            <td>json</td>
        </tr>

        <tr ng-repeat="item in products">
            <td>{{item.name | labelCase2:"###":"@@@"}}</td>
            <td>{{item.cat | uppercase}}</td>
            <td>{{item.price | currency:"¥"}}</td>
            <td>{{item.expiry | number:0}}</td>
            <td>{{item | json}}</td>
        </tr>
    </table>

    <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
    <script type="text/javascript">
        angular.module("myApp",[])
        .controller("tableCtrl",function($scope){
            $scope.products = [
                {name:"苹果",cat:"水果",price:5.0,expiry:100000000},
                {name:"香蕉",cat:"水果",price:6.0,expiry:9},
                {name:"桃子",cat:"水果",price:7.0,expiry:7},

                {name:"22",cat:"yy",price:5.0,expiry:5},
                {name:"33",cat:"yy",price:9.0,expiry:6},
                {name:"44",cat:"yy",price:4.0,expiry:2},
                {name:"55",cat:"yy",price:8.0,expiry:4},

                {name:"ww",cat:"tt",price:4.0,expiry:7},
                {name:"qq",cat:"tt",price:3.0,expiry:9},

            ];

                var now = new Date();
                $scope.now = now;

        })
        .filter("labelCase",function(){
            return function(value,pre){
                if(angular.isString(value)){
                    return pre+value;
                }else{
                    return value;
                }
            }
        })
        .filter("labelCase2",function($filter){
            return function(value,pre,end){
                return $filter(‘labelCase‘)(value,pre)+end;
            }
        });
    </script>

</body>
</html>

  原来写了一个labelCase,以此为基础写了一个labelCase2, 使之可以同时加上前缀和后缀。由此可见我是巨人(标题是站在巨人的肩膀上)。

  至此,过滤器就学完了。感觉过滤器虽然比较简单,但是作用不小,它可以方便的让同一数据模型有不同的表现形式,非常灵活。

时间: 2024-08-13 01:23:53

AngularJS1.X学习笔记7-过滤器的相关文章

jQuery学习笔记之过滤器三(向上查找兄弟元素、向下查找兄弟元素)

向上查找兄弟元素的方法:prev方法.prevAll方法.prevUntil方法 向下查找兄弟元素:next方法.nextAll方法.nextUntil方法 向上查找兄弟元素 1.prev方法 2.prevAll方法 3.prevUntil方法 向下查找兄弟元素 1.next方法 2.nextAll方法 3.nextUntil方法 jQuery学习笔记之过滤器三(向上查找兄弟元素.向下查找兄弟元素)

学习笔记_过滤器详细(过滤器JavaWeb三大组件之一)

过滤器详细 1 过滤器的生命周期 我们已经学习过Servlet的生命周期,那么Filter的生命周期也就没有什么难度了! (l)  init(FilterConfig):在服务器启动时会创建Filter实例,并且每个类型的Filter只创建一个实例,从此不再创建!在创建完Filter实例后,会马上调用init()方法完成初始化工作,这个方法只会被执行一次: (l)  doFilter(ServletRequest req,ServletResponse res,FilterChain chain

Javaweb学习笔记9—过滤器

? 今天来讲javaweb的第9阶段学习. ? 过滤器,我在本次的思维导图中将过滤器和监听器放在一起总结了,监听器比较简单就不单独写了. ? 老规矩,首先先用一张思维导图来展现今天的博客内容. ? ? ? ? ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 ? 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. ? ? ? ? ? ? 1* 作用: ? ? ? 用于过滤请求(Request)与响应(Response)的数据内容.

AngularJS1.X学习笔记8-自定义指令(上)

AngulaJS的指令是一种非常强大的特性,一个ng-repeat就能让我们非常方便的展示一个数据列表,指令相当于是一个组件,为我们将一些东西封装起来了,提供了复用的可能性.个人认为自定义指令还是比较复杂的,下面开始攻关. 一.三个重要参数 <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <meta charset="UTF-8"> &l

学习笔记_过滤器详细_2(过滤器JavaWeb三大组件之一)

过滤器详细 5 四种拦截方式 我们来做个测试,写一个过滤器,指定过滤的资源为b.jsp,然后我们在浏览器中直接访问b.jsp,你会发现过滤器执行了! 但是,当我们在a.jsp中request.getRequestDispathcer(“/b.jsp”).forward(request,response)时,就不会再执行过滤器了!也就是说,默认情况下,只能直接访问目标资源才会执行过滤器,而forward执行目标资源,不会执行过滤器!(跳转的不会执行F) public class MyFilter

学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)

过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context.session.request事件进行监听. Filter意为滤镜或者过滤器,用于Servlet之外对request或者response进行修改.Filter提出了滤镜链的概念,一个Filterchain包括多个F 1 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它

学习笔记_过滤器应用案例(解决全站字符乱码)

解决全站字符乱码(POST和GET中文编码问题) servlet: l  POST:request.setCharacterEncoding(“utf-8”); l  GET: String username = request.getParameter(“username”); username = new String(username.getBytes(“ISO-8859-1”), “utf-8”); 1 说明 乱码问题: l  获取请求参数中的乱码问题: POST请求:request.s

AngularJS1.X学习笔记2-数据绑定

上一篇从整体上认识了Angular,从现在开始更加深入的学习Angular的特性.本次学习的是数据绑定.应该所有的MVC框架都会用到数据绑定,比如我所知道的ThinkPHP.struts等,只有实现了数据绑定才能将模型层和视图层分离,实现MVC.Angular的数据绑定比较特别,它支持双向数据绑定. 1.ng-bind <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> &

AngularJS1.X学习笔记6-控制器和作用域

经过一番艰苦卓绝的鏖战,我终于来到了控制器和作用域部分.控制器作为MVC的C,其重要性不可谓不重要:作用域决定了你可以拿到哪些东西,亦是分外重要.现在就来学习一下两个东西.去看看$apply,$watch,$broadcast是个什么鬼. 一.谈谈MVC 阮一峰老师说Angular是一个叫MVVM的模式(http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html),而自由男人说这是一个MVC框架,个人认为都差不多,目标都是分层,便于协作和维护,