当前位置: 首页 > 面试题库 >

angularjs自定义过滤器,用于检查数据数组中的值

公羊渝
2023-03-14
问题内容

我有两个过滤器,它们根据数据中的队列键过滤数据。这是我的代码:

var app = angular.module('app', []);



app.controller('mainController', function($scope) {

  // Data object

  $scope.servers = [{

      name: 'ServerA',

      queue: '111'

    },

    {

      name: 'Server7',

      queue: '111'

    },

    {

      name: 'Server2',

      queue: '456'

    },

    {

      name: 'ServerB',

      queue: '456'

    },

  ];



  // Filter defaults

  $scope.Filter = new Object();

  $scope.Filter.queue = {

    'PAV': '111',

    'UAT': '456'

  };



});



// Global search filter

app.filter('searchFilter', function($filter) {

  return function(items, searchfilter) {

    var isSearchFilterEmpty = true;

    angular.forEach(searchfilter, function(searchstring) {

      if (searchstring != null && searchstring != "") {

        isSearchFilterEmpty = false;

      }

    });

    if (!isSearchFilterEmpty) {

      var result = [];

      angular.forEach(items, function(item) {

        var isFound = false;

        angular.forEach(item, function(term, key) {

          if (term != null && !isFound) {

            term = term.toString();

            term = term.toLowerCase();

            angular.forEach(searchfilter, function(searchstring) {

              searchstring = searchstring.toLowerCase();

              if (searchstring != "" && term.indexOf(searchstring) != -1 && !isFound) {

                result.push(item);

                isFound = true;

              }

            });

          }

        });

      });

      return result;

    } else {

      return items;

    }

  }

});


<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.3/angular.min.js"></script>

<div ng-app="app">

  <div ng-controller="mainController">

    <label>show 111</label>

    <input type="checkbox" ng-model="Filter.queue.PAV" ng-true-value='"111"' ng-false-value='"!111"' />&nbsp;

    <label>show 456</label>

    <input type="checkbox" ng-model="Filter.queue.UAT" ng-true-value='"456"' ng-false-value='"!456"' />&nbsp;



    <hr />



    <table width="100%" cellpadding="5">

      <tr>

        <th>Name</th>



        <th>Queue</th>



      </tr>

      <tr ng-repeat="server in servers | searchFilter:Filter.queue">

        <td>{{server.name}}</td>



        <td>{{server.queue}}</td>



      </tr>

    </table>

  </div>

</div>

过滤器工作完美。

但是如果我有这样的数据,队列在数组内:

$scope.servers = [
    {name:'ServerA', queuearr:[{'queue' :'111'}]},
    {name:'Server7', queuearr:[{'queue' :'111'}]},
    {name:'Server2', queuearr:[{'queue' :'456'}]},
    {name:'ServerB', queuearr:[{'queue' :'456'}]},
];

注意:队列中可以有多个对象,如下所示:[{queue :'111'},{queue :'278'}]

如何更改当前代码,以使控件进入queuerr数组内部并匹配队列并相应地返回结果?


问题答案:

您有一些条件需要更改,Angular.forEach以查看解决方案。

ServerB出现在两个搜索中

var app = angular.module('app', []);



app.controller('mainController', function($scope) {

  // Data object

  $scope.servers = [{

      name: 'ServerA',

      queue: '111'

    },

    {

      name: 'Server7',

      queue: '111'

    },

    {

      name: 'Server2',

      queue: '456'

    },

    {

      name: 'ServerB',

      queue: '456',

      queuearr: [{

        queue: '456'

      }, {

        queue: '111'

      }]

    },

  ];



  // Filter defaults

  $scope.Filter = new Object();

  $scope.Filter.queue = {

    'PAV': '111',

    'UAT': '456'

  };



});



// Global search filter

app.filter('searchFilter', function($filter) {

  return function(items, searchfilter) {

    var isSearchFilterEmpty = true;

    angular.forEach(searchfilter, function(searchstring) {

      if (searchstring != null && searchstring != "") {

        isSearchFilterEmpty = false;

      }

    });

    if (!isSearchFilterEmpty) {

      var result = [];

      angular.forEach(items, function(item) {

        var isFound = false;

        angular.forEach(item, function(term, key) {

          // change here to check for arrays

          if (term || Array.isArray(term) && !isFound) {

            // use JSON.stringify here

            term = JSON.stringify(term);

            term = term.toLowerCase();

            angular.forEach(searchfilter, function(searchstring) {

              searchstring = searchstring.toLowerCase();



              if (searchstring != "" && term.indexOf(searchstring) != -1 && !isFound) {

                result.push(item);

                isFound = true;

              }

            });

          }

        });

      });

      return result;

    } else {

      return items;

    }

  }

});


<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.3/angular.min.js"></script>

<div ng-app="app">

  <div ng-controller="mainController">

    <label>show 111</label>

    <input type="checkbox" ng-model="Filter.queue.PAV" ng-true-value='"111"' ng-false-value='"!111"' />&nbsp;

    <label>show 456</label>

    <input type="checkbox" ng-model="Filter.queue.UAT" ng-true-value='"456"' ng-false-value='"!456"' />&nbsp;



    <hr />



    <table width="100%" cellpadding="5">

      <tr>

        <th>Name</th>



        <th>Queue</th>



      </tr>

      <tr ng-repeat="server in servers | searchFilter:Filter.queue">

        <td>{{server.name}}</td>



        <td>{{server.queue}}</td>



      </tr>

    </table>

  </div>

</div>


 类似资料:
  • 在我的控制器中,我想过滤一个对象数组。这些对象中的每一个都是一个映射,可以包含字符串和列表 我尝试使用< code>$filter('filter')(array,function)格式,但是我不知道如何在我的函数中访问数组的各个元素。这里有一个片段显示了我想要的。 然后在中,我将检查每个单独的属性是否匹配 我必须在控制器中完成所有这些操作,并编译一个列表列表并在范围内设置它们。因此,我确实需要以

  • 问题内容: 假设我以ng-repeat以表格格式显示以下数据。 以上代码取自http://code.ciphertrick.com/2015/06/01/search-sort-and-pagination- ngrepeat-angularjs/ 这样我们就可以搜索。无论用户在搜索文本框中输入哪种内容,都将基于该过滤器生成数据,但是我的要求有些不同。 我将有一个下拉列表,其中将填充所有字段名称,

  • 本文向大家介绍详解AngularJS中$filter过滤器使用(自定义过滤器),包括了详解AngularJS中$filter过滤器使用(自定义过滤器)的使用技巧和注意事项,需要的朋友参考一下 1.内置过滤器 2.自定义过滤器     套用上面的格式定义两个简单的自定义过滤器一个带条件的,一个不带条件的。 (1)【不带条件】,功能:固定转换(有时候项目中会遇到角色代号,门店编码什么的,但是显示的时候

  • 本文向大家介绍详解AngularJS中自定义过滤器,包括了详解AngularJS中自定义过滤器的使用技巧和注意事项,需要的朋友参考一下 过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果。主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等。ng内置了一些过滤器,它们是:currency(货币)、date(日期)、filter(子

  • 问题内容: 在我的控制器内部,我想过滤一个对象数组。每个对象都是一个映射,可以包含字符串和列表 我尝试使用格式,但是我不知道如何在函数中访问数组的各个元素。这是显示我想要的内容的摘要。 然后在中,我将检查每个单个属性是否匹配 我必须在控制器中完成所有这些操作,并编译一个列表列表,然后在范围内进行设置。因此,我只需要以这种方式访问。到目前为止,我在网上发现的所有示例都在函数内部进行了静态条件搜索,它

  • 问题内容: 我在Django模型类中内置了一个函数,我想使用该函数过滤查询结果。 现在,我想在查询过滤器中使用此功能,例如 我知道,对于这种简单的“ is_active”情况,我可以在过滤器查询中直接进行比较,但是对于更复杂的情况,这可能是不可能的。我应该如何基于自定义函数进行查询? 问题答案: 我建议您为类使用自定义管理器,您可以这样使用: 这将通过以下方式实现: 查看自定义经理