2016-01-21 17 views
1

目前,我有一個搜索框和重複列表。我的重複列表使用具有許多屬性的對象。Angular`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屬性中查看?

回答

1

使用這個在你的控制器

$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> 
+0

這是一個非常巧妙的解決辦法通過只引用一個函數,而不是一噸的,因爲它使模板非常乾淨的其他標準。 – Fizzix

+0

@Fizzix讓我知道它是否解決您的問題 – agm92

+0

這解決了我的問題。而不是'keyword.test(user.firstName)|| keyword.test(user.lastName)'我只是使用'keyword.test(user.firstName +「」+ user.lastName)'來匹配全名。好的解決方案 – Fizzix

0

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

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/