Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html OrderBy在ng repeat中不处理多个属性_Html_Angularjs - Fatal编程技术网

Html OrderBy在ng repeat中不处理多个属性

Html OrderBy在ng repeat中不处理多个属性,html,angularjs,Html,Angularjs,我有这张桌子。我想按日期、日期、月份排序。当我使用下面的代码时,我可以按天进行排序,但我不能按排序人对天和月进行排序:[“天”,“月]。因此它显示了2015年7月8日之前的2015年6月9日。能给我一些线索吗 <h1>Reservations</h1> <table class="table"> <thead> <tr> <th ng-repeat="heading in data

我有这张桌子。我想按日期、日期、月份排序。当我使用下面的代码时,我可以按天进行排序,但我不能按排序人对天和月进行排序:[“天”,“月]。因此它显示了2015年7月8日之前的2015年6月9日。能给我一些线索吗

<h1>Reservations</h1>

<table class="table">
    <thead>
        <tr>
            <th ng-repeat="heading in data1.headings">{{heading}}</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="reservation in reservations|orderBy:'day'" ng-show="reservation.is_approved">
            <td>{{reservation.id}}</td>
            <td>{{reservation.user.fb_id}}</td>
            <td>{{reservation.user.name}}</td>
            <td>{{reservation.user.phone}}</td>
            <td>{{reservation.user.email}}</td>
            <td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>           
        </tr>
    </tbody>
</table>

您需要将日期转换为Javascript日期对象,然后才能应用正确的排序

因此,在您的控制器中,请执行以下操作:根据您的需要进行更新

您可以使用创建Javascript日期对象

之后,您应该能够按日期正确排序

<tr ng-repeat="reservation in reservations|orderBy:'date'" ng-show="reservation.is_approved">

发生这种情况是因为orderBy不知道注入日期。它只是按数字排序。您应该添加到应用程序筛选器中,以将数据解析为正确的日期并对数组进行排序:

app.filter('filterByDate', function filterByDate() {
  return function(array, descending) {
    var order = descending ? 1 : -1;

    array.sort(function(a, b) {
      return (new Date(b.year, b.month, b.day) - new Date(a.year, a.month, a.day)) * order;
    });

    return array;
  };
});
这样使用:

<tr ng-repeat="reservation in reservations|filterByDate" ng-show="reservation.is_approved">
    <td>{{reservation.id}}</td>
    <td>{{reservation.user.fb_id}}</td>
    <td>{{reservation.user.name}}</td>
    <td>{{reservation.user.phone}}</td>
    <td>{{reservation.user.email}}</td>
    <td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>           
</tr>
或者,如果要按降序对日期排序,请将参数true添加到筛选器:

<tr ng-repeat="reservation in reservations|filterByDate:true" ng-show="reservation.is_approved">
    <td>{{reservation.id}}</td>
    <td>{{reservation.user.fb_id}}</td>
    <td>{{reservation.user.name}}</td>
    <td>{{reservation.user.phone}}</td>
    <td>{{reservation.user.email}}</td>
    <td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>           
</tr>

默认情况下,orderBy使用升序排序,您可以使用['day','-month']按月降序

您想先按月份排序吗?那么它应该是:orderBy:['month','day']哈哈哈。我不知道为什么一开始我不这么想。它起作用了。
<tr ng-repeat="reservation in reservations|filterByDate:true" ng-show="reservation.is_approved">
    <td>{{reservation.id}}</td>
    <td>{{reservation.user.fb_id}}</td>
    <td>{{reservation.user.name}}</td>
    <td>{{reservation.user.phone}}</td>
    <td>{{reservation.user.email}}</td>
    <td>{{reservation.day}}/{{reservation.month}}/{{reservation.year}}</td>           
</tr>