AngularJS过滤器

过滤器

匹配方式过滤
  • 通过filter过滤器直接匹配包含字符参数的数据

    • 在调用filter过滤器时,添加一个需要匹配的字符参数:

    {{data | filter:'匹配字符'}}

    {{data | filter:80}}

  • 在字符参数重使用对象形式匹配指定属性数据

    • 过滤器参数是一个对象,通过key/value的方式声明属性名称和匹配的字符内容,如果属性名是$的时候,则表示在全部属性中查找:

    {{data | filter:{score:80}}}

    {{data | filter:{$:80}}} = {{data | filter:80}}

  • 在字符参数中使用自定义函数匹配相应数据

    • 直接调用自定义函数名,处理相对复杂的数据匹配情况

    {{data | filter:函数名称}}

  • 代码

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>匹配方式过滤</title>
      <script src="components/angular/angular.min.js"></script>
      <style>
          ul{
              list-style-type: none;
              width: 408px;
              margin: 0px;
              padding: 0px;
          }
          ul li{
              float: left;
              padding: 5px 0px;
          }
          ul li span{
              width: 52px;
              float: left;
              padding: 0px 10px;
          }
      </style>
    </head>
    
    <body ng-app="a3_2">
      <div ng-controller="c3_2">
          <ul>
              <li>
                  <span>index</span>
                  <span>name</span>
                  <span>sex</span>
                  <span>age</span>
                  <span>score</span>
              </li>
              <li ng-repeat="stu in data | filter:findscore">
                  <span>{{$index + 1}}</span>
                  <span>{{stu.name}}</span>
                  <span>{{stu.sex}}</span>
                  <span>{{stu.age}}</span>
                  <span>{{stu.score}}</span>
              </li>
          </ul>
      </div>
      <script>
          var a3_2 = angular.module('a3_2', []);
          a3_2.controller('c3_2', ['$scope', function ($scope) {
              $scope.data = [{
                      name: 'WJ',
                      sex: 'woman',
                      age: 24,
                      score: 70
                  },
                  {
                      name: 'GYT',
                      sex: 'woman',
                      age: 24,
                      score: 80
                  },
                  {
                      name: 'XP',
                      sex: 'man',
                      age: '24',
                      score: 90
                  },
                  {
                      name: 'ZYT',
                      sex: 'man',
                      age: '24',
                      score: 100
                  }
              ];
              $scope.findscore = function(e){
                  return e.score > 80;
              }
          }])
      </script>
    </body>
    
    </html>
  • 解析

    当通过filter过滤器匹配数据时,直接将函数名作为过滤器参数,此时,“data”数据对象已作为实參自动传递给函数的形參“e”中,函数接收后,根据“data”对象中的“score“属性值,将分数在限制范围之内。

  • 自定义过滤器

    • 介绍

    需要在页面模块中注册一个过滤器的构造方法,该方法将返回一个以输入值为首个参数的函数没在函数体中。

    • 代码
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>匹配方式过滤</title>
        <script src="components/angular/angular.min.js"></script>
        <style>
            ul{
                list-style-type: none;
                width: 408px;
                margin: 0px;
                padding: 0px;
            }
            ul li{
                float: left;
                padding: 5px 0px;
            }
            ul li span{
                width: 52px;
                float: left;
                padding: 0px 10px;
            }
        </style>
    </head>
    
    <body ng-app="a3_2">
        <div ng-controller="c3_2">
            <ul>
                <li>
                    <span>index</span>
                    <span>name</span>
                    <span>sex</span>
                    <span>age</span>
                    <span>score</span>
                </li>
                <li ng-repeat="stu in data | young:0">
                    <span>{{$index + 1}}</span>
                    <span>{{stu.name}}</span>
                    <span>{{stu.sex}}</span>
                    <span>{{stu.age}}</span>
                    <span>{{stu.score}}</span>
                </li>
            </ul>
        </div>
        <script>
            var a3_2 = angular.module('a3_2', []);
            a3_2.controller('c3_2', ['$scope', function ($scope) {
                $scope.data = [{
                        name: 'WJ',
                        sex: 'woman',
                        age: 24,
                        score: 70
                    },
                    {
                        name: 'GYT',
                        sex: 'woman',
                        age: 24,
                        score: 80
                    },
                    {
                        name: 'XP',
                        sex: 'man',
                        age: '24',
                        score: 90
                    },
                    {
                        name: 'ZYT',
                        sex: 'man',
                        age: '24',
                        score: 100
                    }
                ];
            }])
            .filter('young',function(){
                return function(e,type){
                    var _out = [];
                    console.log(type);
                    var _sex = type ? 'man':'woman';
                    console.log(e);
                    for(var i = 0;i<e.length;i++){
                        if(e[i].score> 80){
                            console.log(e[i]);
                            _out.push(e[i]);
                        }
                    }
                    return _out;
                }
            })
        </script>
    </body>
    
    </html>
    • 代码解析

    自定义的形參 e 是整个数组,而不是循环的单个对象,而匹配方式过滤是将循环出来的对象传给自定义函数。先这个数组循环。找到符合要求的数据,push到新的数组。返回到页面中,展示。

    <li ng-repeat="stu in data | young:0">

    “:”后面 0 就是参数传到自定义过滤器中。

  • 过滤器的应用

    • 表头排序

    x in list | orderBy : title : desc

    • 字符查找

    x in list | filter : {name:key}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值