如何在AngularJS ng-repeat中的多个字段上进行过滤

时间:2014-11-18 19:28:30

标签: angularjs filter angularjs-filter

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

<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>

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

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