2014-03-02 1 views
0

나는 그의 열 중 하나가 결합 된 컬럼 인 NG 그리드 있습니다결합 된 열을 필터링하는 방법은 무엇입니까? (NG-그리드)

angular.forEach($scope.opportunitiesData,function(row){ 
      row.getABDisplayName = function(){ 
       return this.a + ' - ' + this.b; 
      }; 

     }); 



$scope.gridOptions = { 
      data: 'loadGridItems', 
      headerRowHeight: 0, 
      multiSelect: false, 
      showFilter: false, 
      columnDefs: [{field:'getABDisplayName()',displayName:"Tasks"}, 

         ...], 
      enableSorting: true, 
      filterOptions: $scope.filterOptions 
     }; 

내 문제는 필터가 해당 필드에서 작동하지 않는다는 것입니다. 나는 그것을 변경하려고 시도하고 결합 된 필드를 2 개의 필드로 분류하고 필터가 작동합니다 ... 두 필드가 모두 문자열이기 때문에 어떤 차이가 있는지 확실하지 않습니다.

+0

보통은 setPagingData (myBuildData, 페이지, pageSize가)에 직접 당신이 그것을 (데이터)를 전달할 수있는 데이터를 구축하기위한 기능/서비스를 가지고 더 나은 옵션입니다; – Whisher

+0

데이터가 팩토리 서비스에 의해 반입됩니다 ... 그러나 나는 그것이 어떻게 관련되는지 보지 못합니다. – tomerz

+0

tomerz - 아래에서 내 대답을 확인하고 이것이 도움이되는지 알려주십시오. 그렇다면 대답으로 투표하십시오. 고마워. – djmarquette

답변

2

필자는 동일한 문제 (3 개의 필터링 된 열에 연결된 필드 만 있음)가있는 것을보고있었습니다. 결국 나는 다음을 생각해 냈습니다.

사용자가 직접 필터를 만들고 ng-grid의 기본 제공 filterOptions를 무시해야합니다. 의 라인을 따라

뭔가 :

// pass in your original dataset to filter, and filter text 
app.filter('opportunitiesFilter',function(){ 
    return function(array, input){ 

    var match = [];    // will hold your newly filtered data 
    if (input = '') return array; // return orig data if nothing entered 

    // use foreach to loop through your original array 
    angular.forEach(array, function(item){ 

     // your filter logic goes here - might be the following: 
     if (item.indexOf(input) >= 0) match.push(item); 
     }); 
    return match; 
}); 

그리고 아래로 컨트롤러 코드는 검색 텍스트 필드에 시계를 추가하고 변경할 때 필터를 호출합니다. 원본 데이터 배열을 전달하고 필드 텍스트를 필터로 검색 한 다음 필터 된 배열을 ng-grid 데이터 매개 변수에 바인딩합니다. 컨트롤러 서명에 $ filter 호출을 포함시켜야합니다. 즉. 기능 ($ 범위, $ HTTP, $ 필터, ...) {}이 나를 위해 일

// watch your input field for changes to filter on, call custom filter, and bind to grid 
$scope.watch('searchText'), function(){ 
    $scope.'loadGridItems' = $filter('opportunitiesFilter')($scope.opportunitiesData, $scope.searchText); 
} 

, 당신은 당신의 필터를 조정할해야 할 수도 있지만 필요 - 케이스를 수행하는 등 .toLowerCase()를 사용하여 같은 - 감응 매칭 등.

희망이 있으면 도움이됩니다. 잠시 시간이 걸렸으나 지금은 좋은 편입니다.

건배, 댄

+0

upvote 주셔서 감사합니다. 그러나 이것이 대답이라고 생각하지 않습니까? 더 나은 해결책이 있으면 알려주십시오. 또는 이것을 답으로 표시해주십시오. – djmarquette