2016-12-03 54 views
1

我有一个模型具有名字和姓氏属性的人员列表。使用角度的过滤器功能,我可以创建一个基本的搜索过滤列表。然而,在它的基本形式中,用户不能同时搜索名字和姓氏以获得任何结果,因为角度一次仅查看一个属性。有没有办法创建连接两个用于搜索的“虚拟”属性?角度过滤器 - 搜索两个连接字段

如果我解释说,可怕的,我平时做什么,只是尝试搜索“史蒂夫·乔布斯”在这个片断:

var app = angular.module('app', []); 
 

 
app.controller('myCtrl', function($scope) { 
 
    $scope.people = [ 
 
    {first: 'John', last: 'Smith'}, 
 
    {first: 'Jane', last: 'Doe'}, 
 
    {first: 'Bill', last: 'Gates'}, 
 
    {first: 'John', last: 'Krasinski'}, 
 
    {first: 'Ada', last: 'Lovelace'}, 
 
    {first: 'Brad', last: 'Pitt'}, 
 
    {first: 'Steve', last: 'Jobs'}, 
 
    {first: 'Bill', last: 'Clinton'}, 
 
    {first: 'Britishname', last: 'Complicated'}, 
 
    {first: 'Steve', last: 'Wozniak'} 
 
    ]; 
 
});
<div ng-app="app" ng-controller="myCtrl"> 
 
    <input type="text" ng-model="search" placeholder="Search..."> 
 
    
 
    <ul> 
 
    <li ng-repeat="person in people | filter: search"> 
 
     {{person.first}} {{person.last}} 
 
    </li> 
 
    </ul> 
 
</div> 
 

 

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

回答

0

其实,我已经想通了我自己,但我会把这个留给别人。

var app = angular.module('app', []); 
 

 
app.controller('myCtrl', function($scope) { 
 
    $scope.people = [ 
 
    {first: 'John', last: 'Smith'}, 
 
    {first: 'Jane', last: 'Doe'}, 
 
    {first: 'Bill', last: 'Gates'}, 
 
    {first: 'John', last: 'Krasinski'}, 
 
    {first: 'Ada', last: 'Lovelace'}, 
 
    {first: 'Brad', last: 'Pitt'}, 
 
    {first: 'Steve', last: 'Jobs'}, 
 
    {first: 'Bill', last: 'Clinton'}, 
 
    {first: 'Britishname', last: 'Complicated'}, 
 
    {first: 'Steve', last: 'Wozniak'} 
 
    ]; 
 
    
 
    $scope.criteriaMatch = function(criteria) { 
 
    return function(person) { 
 
     var concatenated = person.first + ' ' + person.last; 
 
     return !criteria || concatenated.toLowerCase().indexOf(criteria.toLowerCase()) !== -1; 
 
    } 
 
    }; 
 
});
<div ng-app="app" ng-controller="myCtrl"> 
 
    <input type="text" ng-model="search" placeholder="Search..."> 
 
    
 
    <ul> 
 
    <li ng-repeat="person in people | filter: criteriaMatch(search)"> 
 
     {{person.first}} {{person.last}} 
 
    </li> 
 
    </ul> 
 
</div> 
 

 

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

:您可以像这样的过滤器创建一个函数