【问题标题】:How to filter on multiple fields in AngularJS ng-repeat如何过滤AngularJS ng-repeat中的多个字段
【发布时间】:2015-01-16 02:49:36
【问题描述】:

我正在创建一个使用 AngularJS 中的查询过滤器进行搜索的网站。我找到了许多关于如何在一个字段中实现此搜索的教程,但没有一个解释如何跨多个字段进行搜索。因此,如果您的数据有名字:“约翰”,姓氏:“史密斯”,我希望能够在我的搜索栏中输入“约翰史密斯”,并找到正确的结果,但只有“约翰”或“史密斯”的作品。

<div ng-include="'partials/navbar.html'"></div>
<div class="container" ng-controller="ResListCtrl">
    <div class="row">
        <div class="col-md-2">
            Search: <input ng-model="query">
        </div>
    </div>
    <hr>
    <div class="row">
        <div class="col-md-10">
            <ul ng-repeat="reservation in reservations | filter:query">
                <li><a href="#">{{reservation.firstName}} {{reservation.lastName}}</a></li>
                <p>{{reservation.resort}}</p>
            </ul>
        </div>
    </div>
</div>

【问题讨论】:

    标签: angularjs filter angularjs-filter


    【解决方案1】:

    根据角度文档,您可以将对象传递给过滤器。所以你可以这样做:

    scope.query = {};
    

    然后在你的html中

    First name: <input ng-model="query.firstName" />
    Last name: <input ng-model="query.lastName" />
    

    您的过滤器表达式将保持不变:

    ng-repeat="reservation in reservations | filter:query"
    

    有关更多信息,请参阅“表达式”参数的详细信息:https://docs.angularjs.org/api/ng/filter/filter

    【讨论】:

    • 对不起,我想我的问题没有说清楚。我希望能够在同一个搜索栏中同时搜索名字和姓氏。此解决方案创建了两个单独的搜索栏。
    • 您可以在该搜索输入上设置 $watch,然后使用 split(' ') 获取名字和姓氏,然后使用其中的结果填充查询。
    【解决方案2】:

    过滤器也接受一个函数(https://docs.angularjs.org/api/ng/filter/filter):

    function(value, index) {
      return value === query.first_name + ' ' + query.last_name;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多