如何在智能表中按日期对项目进行排序

时间:2015-04-05 18:38:40

标签: javascript html angularjs smart-table

如何在智能表中按日期对数据进行排序?通过st-sort它并不是那么好。

<table st-table="displayedCollection" st-safe-src="playerCollection" class="table table-hover">
      <thead>
        <tr>
            <th st-sort="id" class="hover">Id</th>
            <th st-sort="firstname" class="hover">Jméno</th>
            <th st-sort="lastname" class="hover">Příjmení</th>
            <th st-sort="registrationDate" class="hover">Datum registrace</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="player in displayedCollection">
            <td class="hover">{{player.id}}</td>
            <td class="hover">{{player.firstname}}</td>
            <td class="hover">{{player.lastname}}</td>
            <td class="hover">{{player.registrationDate}}</td>
        </tr>
      </tbody>
  </table>

感谢您的回答。

3 个答案:

答案 0 :(得分:7)

它应该正常工作(参见文档网站)。但是,如果您的注册日期是日期字符串,则应使用getter返回其日期对象版本,否则您将获得alphaNumeric命令

控制器中的

$scope.getters = {
   registrationDate:function(row) {
      return new Date(row.registrationDate);
   }
}

因此您可以将标头绑定到此getter

<th st-sort="getters.registrationDate">Datum registrace</th>

答案 1 :(得分:2)

按照这样的ng-repeat添加订单:

<tr ng-repeat="player in displayedCollection | orderBy:'registrationDate'">
   <td class="hover">{{player.id}}</td>
   <td class="hover">{{player.firstname}}</td>
   <td class="hover">{{player.lastname}}</td>
   <td class="hover">{{player.registrationDate}}</td>
</tr>

对于排序onclick,您可以向确定排序的范围添加变量,并在orderBy的{​​{1}}上使用该变量。

这样的事情:

ng-repeat

我为此创建了一个plunker。您将看到是否单击列标题,它将按该列对表进行排序。我希望它有所帮助。

http://plnkr.co/edit/pAJ3PpRwVk7PuTmoMjsr?p=preview

答案 2 :(得分:0)

我将添加另一个与@laurent答案相关的可能解决方案。他的解决方案在我的情况下没有工作,所以我改变了一点吸气剂:

$scope.getters = {
   registrationDate:function(row) {
      return (new Date(row.registrationDate)).getTime();
   }
}

getTime()返回自1970/01/01以来的毫秒数,因此该列将按编号而不是按日期排序(在我的情况下它没有工作,我没有想到为什么)结果是一样的。