2014-07-12 2 views
3

목록에 간단한 AngularJS 필터를 만들려고합니다. 그러나 필자가 필터링하고자하는 요소는 배열의 하위 요소입니다.배열의 하위 요소에 AngularJS 필터 목록

(JSFIDDLE)

개체 :

elements = [{ 
    'claim': [{value:'foo'}], 
    class: 'class1', 
    subject: 'name1' 
}, { 
    'claim': [{value:'bar'}], 
    class: 'class1', 
    subject: 'name2' 
}, { 
    'claim': [{value:'baz'}], 
    class: 'class1', 
    subject: 'name2' 
}, { 
    'claim': [{value:'quux'}], 
    class: 'class1', 
    subject: 'name3' 
}]; 

HTML :

<tr class='claimrow' 
    data-ng-repeat='c in elements | filter:{claim[0].value:srcBoxFilter} | orderBy: "claim[0].value" '> 

구문 "제 [0] .value"그러나 필터하지 않는 손잡이를 이용하여 주문.

Error: Syntax Error: Token '[' is unexpected, expecting [:] 
at column 25 of the expression 
[elements | filter:{claim[0].value:srcBoxFilter} | orderBy: "claim[0].value"] 
starting at [[0].value:srcBoxFilter} | orderBy: "claim[0].value"]. 
+0

중복 가능성 [Angular.js 버전과 중첩 필터링 1.2.18] (http://stackoverflow.com/questions/24266784/nested-filtering-with-angular-js-version-1-2-18) – Blackhole

+0

이것은 배열의 도입으로 인해 다릅니다. 나는 필터를 시도했다 : {claim : [{value : srcBoxFilter}]}하지만 작동하지 않는 것 같다. (오류가 사라지더라도) – ed4becky

답변

1

재미있는 문제 :

이 오류가 발생합니다. 특히, 중첩 된 배열 값은 순서 지정에 사용되지만 필터링에는 사용되지 않기 때문에 특히 그렇습니다. JSFiddle과 연극을했고 상자 밖에서 아무것도 얻을 수 없었습니다. 필터를 직접 작성하여이 문제를 쉽게 해결할 수 있습니다.

나는 이것을 할 수있는 방법을 보여주기 위해 updated your JSFiddle입니다. 내가 코드에 만든 유일한 변화는 다음과 같습니다

자바 스크립트

myApp.filter('byFirstClaimValue', function() { 
    return function (items, filterText) { 
     if(!filterText) 
      return items; 

     var out = []; 
     for (var i = 0; i < items.length; i++) { 
      if (items[i].claim[0].value.toLowerCase().indexOf(filterText.toLowerCase()) > -1) { 
       out.push(items[i]); 
      } 
     } 
     return out; 
    } 
}); 

HTML

<tr class="claimrow" data-ng-repeat="c in elements | byFirstClaimValue:srcBoxFilter | orderBy: 'claim[0].value'"> 
+0

나는 내 자신을 만드는 것이 옵션이라는 것을 알았지 만, ' 해결책. 또는 적어도 인라인 함수 솔루션 – ed4becky

+0

네, 주문이 작동한다고 가정 해 보셨던 것처럼 보입니다. + 귀하의 질문에 +1했습니다. :) –