关于javascript:如何在AngularJS中使用ngTable搜索过滤日期对象

How to search filter date objects with ngTable in AngularJS

我有一个与此类似的表:

1
2
3
4
5
6
<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函数如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
{ Name: '', Created: '', CreatedFormatted: ''}

另一个方法...创建将在filter中使用的自定义比较器:

1
2
3
$filter('filter')(array, expression, comparator)

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

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