使用函数过滤ngTable

时间:2017-10-03 16:55:54

标签: angularjs ngtable

In this plunk我有show-filter=true的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 个答案:

答案 0 :(得分:1)

您可以在控制器中进行分组,以免给您带来麻烦。

我使用map函数进行验证以设置组值,然后将其显示为普通文本过滤器。

地图功能如下

$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