2017-10-03 5 views
0

In this plunk私はshow-filter=trueでngTableを持っています。列の1つ(Group Name)は、別の列(Group)の関数である文字列を示します。問題は、「派生」列であるため、グループ名でフィルタリングできないことです。グループ名でフィルタリングする方法は?関数でngTableをフィルタリングする

HTML:

<table ng-table="tableParams" class="table table-bordered" show-filter="true"> 
     <tbody> 
      <tr ng-repeat="u in $data"> 
       <td title="'User ID'" filter="{ uid: 'text' }"> 
        {{ u.uid }} 
       </td> 
       <td title="'Name'" filter="{ nm: 'text' }"> 
        {{ u.nm }} 
       </td> 
       <td title="'Group ID'" filter="{ ugr: 'text' }"> 
        {{ u.ugr }} 
       </td> 
       <td title="'Group Name'" filter="{ groupName(u.ugr): 'text' }"> 
        {{ groupName(u.ugr) }}</td> 
      </tr> 
     </tbody> 
    </table> 

Javascriptを:

var app = angular.module('app', ['ngTable']); 

app.controller('myCtl', function($scope, NgTableParams) { 

     $scope.data = [{ 
      uid: 'User 1', 
      nm: 'Name 1', 
      ugr: 1 
     }, { 
      uid: 'User 2', 
      nm: 'Name 2', 
      ugr: 2 
     }, { 
      uid: 'User 3', 
      nm: 'Name 3', 
      ugr: 2 
     }]; 


     $scope.groupName = function(group){ 
      if (group==1) 
       return 'AAA'; 
      else 
       return 'BBB'; 
     }; 


     $scope.tableParams = new NgTableParams({ 
      count: 5 
     }, { 
      data: $scope.data 
     }); 

}); 

答えて

1

あなたはちょうどあなたの手間を省くために、コントローラでグループ化を行うことができます。

私はグループ値を設定するための検証を行うためにマップ関数を使用しました。それを通常のテキストフィルタとして表示します。

以下

$scope.data = [{ 
      uid: 'User 1', 
      nm: 'Name 1', 
      ugr: 1 
     }, { 
      uid: 'User 2', 
      nm: 'Name 2', 
      ugr: 2 
     }, { 
      uid: 'User 3', 
      nm: 'Name 3', 
      ugr: 2 
     }].map(function(x){x['group'] = x.ugr === 1 ? 'AAA' : 'BBB';return x;}); 

を次のようにマップ機能があるが、これはあなたを助けている場合、私に知らせて、そのためのデモです。

Plunkr Demo

関連する問題