2014-09-11 3 views
0

테이블 행을 만드는 ngRepeat가있는 데이터 배열을 반복합니다. 이 반복은 제 작성의 다중 열 필터로 필터링됩니다. 테이블의 열은 열 배열을 반복하는 중첩 된 ngRepeat에 의해 만들어집니다. 각 셀의 값은 잠재적으로 '조회'필터로 전달되어 셀의 데이터 값을 '완료'값으로 변환 할 수 있습니다. ('Y'를 '예'로, 'N'을 '아니요'로 변환하는 것과 같습니다.) 변환은 '예'또는 '아니오'유형의 것으로 제한되지 않으며 여러 가지가 있습니다.)뷰 값에 Angular ngRepeat 필터를 만드는 방법은 무엇입니까?

이 같은 :

<tr ng-repeat="row in data | multiColumnFilter : filters"> 
    <td ng-repeat="column in columns | orderBy : 'order'"> 
    <span ng-if="column.lookup">{{row[column.alias] | lookup : column.lookup}}</span> 
    <span ng-if="!column.lookup">{{row[column.alias]}}</span> 
    </td> 
</tr> 

내 문제는 이것이다 :

나는 사용자가 '예'또는 '아니오'와 같은 테이블 셀에 보이는 텍스트를 테이블의 내용을 필터링 할 수 있어야합니다. 그러나 데이터 배열에 저장되는 것은 'Y'또는 'N'입니다.

나는 또한 응용 프로그램의 다른 부분에서 사용하기 위해 원시 데이터 값을 보존하기 때문에 배열을 사전 변환하지 않도록하려고합니다.

변환 된 값을 나타내는 중복 된 데이터 집합을 유지해야한다고 생각합니다. 그것의 오버 헤드 (큰 데이터 배열)를 감안할 때 차라리 데이터 값이 아닌 뷰 값을 더 추가하는 방법을 찾고 싶습니다.

+0

은 단순히 함수에서 인수 위치를 일치시키기 위해 태그에':'를 사용하여 필터에 인수를 추가 할 수 있습니다 – charlietfl

답변

0

플 런커 또는 jsfiddle을 게시 할 수 있다면 쉽게 도움이 될 것입니다.

사용자가 "예"항목 만보고 싶다고 가정 해 봅시다. 그런 다음 뷰 값 "예"에 해당하는 원시 데이터 값 ("Y")을 식별하고이를 기준으로 필터링해야합니다.

function filterBy(column, viewValue) { 
    var rawValue = viewValue; 
    if (column.lookup) { 
     data.some(function(row) { 
      if (column.lookup(row[column])==viewValue) { 
       rawValue = row[column]; 
       return true; 
      } 
      else return false; 
     }); 
    } 
    return data.filter(function(row) { return row[column]==rawValue; }); 
} 

주 : 그래서 본질적으로이 같은 뭔가가 필요 일부() 루프가 첫 번째 일치가 발견되는 즉시 중지된다는 것을 의미의 사용을.

관련 문제