0

私はまだOrderByの問題に悩まされています。データは、$ HTTPから来て、そして次のようになります。検索によるAngularJSのOrderBy配列

[ 
    { 
    "number":1, 
    "timetable": [ 
     { 
     "name":"Station1", 
     "time":"2016-05-18T18:14:00.000Z" 
     }, 
     { 
     "name":"Station2", 
     "time":"2016-05-18T18:18:00.000Z" 
     } 
    ] 
    }, 
    { 
    "number":2, 
    "timetable": [ 
     { 
     "name":"Station1", 
     "time":"2016-05-18T18:24:00.000Z" 
     }, 
     { 
     "name":"Station2", 
     "time":"2016-05-18T18:28:00.000Z" 
     } 
    ] 
    } 
    ] 

は、だから私は必要なものの名前は、たとえばStation2ある行を表示することであり、私は時間によって順序でそれらを必要とします。行は時間順でも番号順でも並べられません。時刻表の行の数は変化するので、行番号も役に立たない。 "OrderBy time name = 'Station2'"のスタイルでng-repeatの中でそれらを注文することは可能ですか?

EDIT: 現在のところ、フィルタリングのみを使用して注文なしで結果を表示しています。現在のPHP:

<tr ng-repeat="x in rows | limitTo:5"> 
    <td> 
    <a href="aikataulu.php?n={{x.number}}"> 
     <span class="label label-primary line-{{x.lineID}}">{{x.lineID}}</span> {{x.number}} 
    </a> 
    </td> 
    <td> 
    <span ng-repeat="y in x.timetable | limitTo:-1">{{y.name}}</span> //This is for showing the destination 
    </td> 
    <td> 
    <span ng-repeat="y in x.timetable | filter:{'name':'<?php echo $as;?>'}: true | limitTo:1">{{y.time | date:'HH:mm'}}</span> 
    </td> 
</tr> 

$は、表示されるステーションです。だから、リストの順番はJSON順からまっすぐになるので、それはかなり変わります。

+1

のようにそれを使用しますこれに対処するために繰り返します。後のレイアウトの良いアイデアが役立ちます。 –

+0

私は駅の時刻表を表示するレイアウトの後で、数字は時間に合わせて並べられます。 ** Station2 ** _Number_ _Time_ 1 18:18 2 18:28 –

+0

一部のHTMLを模倣したものが説明よりもはるかに優れています。これまで何をしていますか? HTMLとコントローラを見るのはいいですね。 –

答えて

1

comparatorをフィルタの追加引数として使用できます。

だから、あなたがあなたのコードを拡大する:

$scope.myComparator= function (a, b) { 
      // regex to see if the compared values are dates 
      var isDate = /(-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-)/g; 

      // sorting dates 
      if (isDate.test(a.value)) { 
       var aDate = new Date(a.value), bDate = new Date(b.value); 
       return aDate.getTime() < bDate.getTime() ? -1 : 1 
      } 

      // default sorting 
      return a.index < b.index ? -1 : 1 
     } 

事の価値:あなたが比較文字列値が日付で、あなたに似た何かを行うことができますかどうかを確認するために正規表現を必要とする

<span ng-repeat="y in x.timetable | filter:{'name':'<?php echo $as;?>'}: true : myComparator | limitTo:1">{{y.time | date:'HH:mm'}}</span> 

あなたの日付形式を見つけるために、別の正規表現が必要になることに注意してください。次の線に沿って何か十分かもしれない:

/(\d{4})-(\d{2})-/g 

注:これはテストされていないコードであり、唯一の適切なアプローチへのガイドとして機能します。あなたのバージョンのAngularJSがフィルタ引数としてコンパレータをサポートしていることを確認してください。

0

あなたはこの1のようなフィルタ機能とそのプロパティのいずれかによってオブジェクトの配列を注文することができます。

angular.module('yourApp').filter('orderObjectBy', function() { 
    return function(items, field, reverse) { 
     var filtered = []; 
     angular.forEach(items, function(item) { 
      filtered.push(item); 
     }); 
     filtered.sort(function (a, b) { 
      return (a[field] > b[field] ? 1 : -1); 
     }); 
     if(reverse) filtered.reverse(); 
      return filtered; 
     }; 
    } 
); 

あなたはng-にGROUPBYとORDERBYを使用することができ、この

<div ng-repeat="elem in data | orderObjectBy:'number'"> 
    // ... 
</div>