2016-10-18 160 views
0

我是新来的角。我有一个JSON对象:angularjs中的多个过滤器

[ 
    { 
    "id": 1, 
    "name": "name1", 
    "speciality": "speciality1", 
    "address": "address1", 
    "phoneNumber": 9999999999 
    }, 
    { 
    "id": 2, 
    "name": "name2", 
    "speciality": "speciality2", 
    "address": "address2", 
    "phoneNumber": 9999999999 
    }, 
... 
] 

,我想筛选基于两个属性:namespeciality。此搜索匹配不敏感的子字符串。这个怎么做?我这样做的方法如下,不工作:

$filter('filter')(doctor.details, { $: query }, false, [name, speciality]); 
$filter('filter')(doctor.details, { name: query } || {speciality : query }, false); 

doctor.details是JSON对象数组,查询与namespeciality匹配(子)字符串。

+0

用户是否在文本框中输入'query' ? –

+0

@RaviTeja不,我不知道。你能帮助我以'有角度的方式'来完成吗? –

+0

那又如何?它仅仅是一个范围变量? –

回答

0

难道它使用lodash,因为这是我能想到的最简单的:

_.union($filter('filter')(doctor.details, { name: query }), $filter('filter')(doctor.details, { speciality: query })); 
0

您可以编写一个AngularJS filter来筛选出基于query匹配namespeciality属性的列表。

app.filter('filterDetails', function() { 
    return function(details, query) { 

    var filteredDetails = []; 
    filteredDetails = details.filter(function(obj) { 
     // look whether query is substring of name or speciality 
     if (~obj.name.indexOf(query) || ~obj.speciality.indexOf(query)) { 
     return obj; 
     } 
    }) 
    // finally return filtered array 
    return filteredDetails; 
    }; 
}); 

HTML

Query : 
    <input type="text" ng-model="query" /> 

    <ul> 
    <li ng-repeat="detail in doctor.details | filterDetails:query"> 
     {{ detail }} 
    </li> 
    </ul> 

Plunker