如何使用AngularJS中的ngTable搜索过滤器日期对象

时间:2014-10-09 14:30:31

标签: javascript angularjs filter ngtable

我有一张类似的表:

<table ng-table="tableParams" show-filter="true" class="table">
  <tr ng-repeat="user in $data">
    <td data-title="'Name'" filter="{'userName':'text'}" sortable="'userName'">{{user.userName}}</td>
    <td data-title="'Created'" filter="{'userCreated':'text'}" sortable="'userCreated'">{{user.userCreated | date:'dd MMM yyyy'}}</td>
  </tr>
</table>

使用ngTableAngular,这会根据我提供的数据生成一个表。它允许用户使用文本输入搜索每列。但是,搜索过滤器不适用于Created列,因为它是一个javascript日期对象(已过滤以不同格式显示)。如何使搜索过滤适用于日期?

我的ngTable功能如下所示:

function userTable(){

  var data = $scope.userList;

  //init ng-table with data
  $scope.tableParams = new ngTableParams({
    page: 1,
    count: 10
  }, {

    //data length and filters
    total: data.length,
    getData: function($defer, params) {

      //search filter
      var filteredData = params.filter() ?
          $filter('filter')(data, params.filter()) :
          data;

      //order filter
      var orderedData = params.sorting() ?
          $filter('orderBy')(filteredData, params.orderBy()) :
          data;

      //resolve data
      params.total(orderedData.length);
      $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
    }

  });
}

然后我打电话给usertable(someData);

1 个答案:

答案 0 :(得分:1)

最快的方法是在您的(视图)模型中添加另一个字段,以保持格式化日期。

所以你的模型看起来像:

{ Name: '', Created: '', CreatedFormatted: ''}

另一个apporach ...创建将在过滤器中使用的自定义比较器:

$filter('filter')(array, expression, comparator)

params.filter() returns object like {Created: "Mon 12,"}

在每个记录的比较器格式日期内并比较字符串......