2016-10-18 2 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 객체 배열, 쿼리 name 또는 speciality과 일치 할 수있는 (하위) 문자열입니다.

+0

은 사용자가 텍스트 상자에'query'를 입력합니까 ? –

+0

@RaviTeja 아니, 그렇지 않아. '각도 방식으로'하는 걸 도와 주실 수 있습니까? –

+0

그럼 어떻게? 범위에있는 변수일까요? –

답변

0

이 내가 생각할 수있는 가장 쉬운 방법이었다대로 lodash를 사용 했습니까 :

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

당신은 querynamespeciality 속성 일치를 기반으로 목록을 필터링 할 AngularJS와 filter을 작성할 수 있습니다.

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