angularjs – 使用ng重复过滤多列

前端之家收集整理的这篇文章主要介绍了angularjs – 使用ng重复过滤多列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道在Angular中是否有一个简单的方法来使用或逻辑而不是使用ng-repeat过滤表.现在,我的过滤器正在搜索表中的所有内容(10列数据),当它只需要过滤2列数据(ID和名称)时.

过滤(by using an object in the filter expression as per the docs和查看this SO answer),我已经设法找到这些2列,但它的用法和逻辑太过于具体.我想让它使用或逻辑,但有麻烦.

我的HTML

<input type="text" ng-model="filterText" />
<table>
      <tr ng-repeat="item in data"><td>{{ item.id }}</td><td>{{ item.name }}</td>...</tr>
</table>

我的过滤逻辑:

$filter(‘filter’)(data,{id:$scope.filterText,name:$scope.filterText})

过滤工作,但是再次,它正在采取匹配的列而不是联合.谢谢!

创建自定义过滤器不难,您可以根据需要拥有尽可能多的参数.以下是一个具有一个和两个参数的过滤器的示例,但您可以根据需要添加多个参数.

示例JS:

var app = angular.module('myApp',[]);
app.filter('myTableFilter',function(){
  // Just add arguments to your HTML separated by :
  // And add them as parameters here,for example:
  // return function(dataArray,searchTerm,argumentTwo,argumentThree) {
  return function(dataArray,searchTerm) {
      // If no array is given,exit.
      if (!dataArray) {
          return;
      }
      // If no search term exists,return the array unfiltered.
      else if (!searchTerm) {
          return dataArray;
      }
      // Otherwise,continue.
      else {
           // Convert filter text to lower case.
           var term = searchTerm.toLowerCase();
           // Return the array and filter it by looking for any occurrences of the search term in each items id or name. 
           return dataArray.filter(function(item){
              var termInId = item.id.toLowerCase().indexOf(term) > -1;
              var termInName = item.name.toLowerCase().indexOf(term) > -1;
              return termInId || termInName;
           });
      } 
  }    
});

然后在你的HTML中

<tr ng-repeat="item in data | myTableFilter:filterText">

或者如果要使用多个参数:

<tr ng-repeat="item in data | myTableFilter:filterText:argumentTwo:argumentThree">

猜你在找的Angularjs相关文章