【问题标题】:ng-repeat filter by array of object only by specific propertiesng-repeat 仅按特定属性按对象数组过滤
【发布时间】:2024-01-21 14:58:01
【问题描述】:

我有一个我正在重复的对象数组。我有一个搜索框来过滤结果。每个对象都包含各种属性,其中一些与搜索过滤器无关。我想将过滤器限制为仅 2 个属性。在下面的示例中,我想忽略“性别”属性,仅按“姓名”或“电话”过滤。

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example - example-example52-production</title>
  

  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
  

  
</head>
<body ng-app="">
    <div ng-init="friends = [{name:'John', phone:'555-1276', gender: 'male'},
                           {name:'Mary', phone:'800-BIG-MARY', gender: 'female'},
                           {name:'Mike', phone:'555-4321', gender: 'male'},
                           {name:'Adam', phone:'555-5678', gender: 'male'},
                           {name:'Julie', phone:'555-8765', gender: 'female'},
                           {name:'Juliette', phone:'555-5678', gender: 'female'}]"></div>

  Search: <input ng-model="searchText">
  <table id="searchTextResults">
    <tr><th>Name</th><th>Phone</th></tr>
    <tr ng-repeat="friend in friends | filter:searchText">
      <td>{{friend.name}}</td>
      <td>{{friend.phone}}</td>
    </tr>
  </table>
</body>
</html>

【问题讨论】:

    标签: angularjs search angularjs-ng-repeat angular-filters


    【解决方案1】:

    您需要一个自定义过滤器:-

    <table id="searchTextResults">
        <tr><th>Name</th><th>Phone</th></tr>
        <tr ng-repeat="friend in friends | filter:search">
          <td>{{friend.name}}</td>
          <td>{{friend.phone}}</td>
        </tr>
      </table>
    
      $scope.search = function (row) {
            return (angular.lowercase(row.name).indexOf($scope.searchText || '') !== -1 || angular.lowercase(row.phone).indexOf($scope.searchText || '') !== -1);
        };
    

    Plunker

    【讨论】:

    • 感谢这项工作,用 html 来做会很好,但似乎没有简单的方法。