Angular`ng-repeat` - 如何仅过滤两个属性?

时间:2016-01-21 07:02:35

标签: javascript angularjs angularjs-ng-repeat

目前,我有一个搜索框和一个重复列表。我的重复列表使用具有许多属性的对象。

JSON

$scope.userlist = [{
  firstName: "Jack",
  lastName: "Smith",
  description: "This is a description"
}, {
  firstName: "Luke",
  lastName: "McDonald",
  description: "My name is Luke, and my friend is Jack"
}]

这是我的重复名单:

<md-list-item ng-repeat="user in userList | filter: searchInput as allResults">
  <p>{{user.firstName}} {{user.lastName}}</p>
</md-list-item>

我的搜索框模型为searchInput,对象以$scope.userList的形式保存到范围内。

如果我搜索jack,则会显示两个结果,因为这两个对象都包含此搜索字词。

如何限制我的过滤器只能在firstNamelastName属性中查看?

3 个答案:

答案 0 :(得分:2)

在控制器中使用此功能

$scope.searchFilter = function (user) {
    var keyword = new RegExp($scope.searchInput, 'i');
    return !$scope.searchInput || keyword.test(user.firstName) || keyword.test(user.lastName);
}

,您的HTML将是:

<md-list-item ng-repeat="user in userList | filter: searchFilter"> 
<p>{{user.firstName}} {{user.lastName}}</p>
</md-list-item>

答案 1 :(得分:1)

您可以应用此过滤器

<div ng-repeat="user in userList | filter:filterUser">

并在您的控制器中

$scope.filterUser = function(user){
    return user.firstName.indexOf($scope.searchInput) !== -1 || 
         user.lastName.indexOf($scope.searchInput) !== -1;
  }

你有一个例子: https://jsfiddle.net/gjj2w3c8/

答案 2 :(得分:0)

<md-list-item ng-repeat="user in userList | filter:{firstName:searchInput}">
  <p>{{user.firstName}} {{user.lastName}}</p>
</md-list-item>