2016-07-05 2 views
1

は、すべてが私にemailIdsのリストを与えて正常に動作しますAngularJS GROUPBY ORDERBY

  <div ng-repeat="(key, value) in leaderboard | groupBy: 'emailId'"> 
       <h3>{{ key }} {{ filteredList.length}}</h3> 
       <li ng-repeat="leaderboard in value | filter: emailId as filteredList"></li> 
      </div> 

これをEMAILID、各emailIdのレコード数とその下にリストされているレコード数。

私がしようとしているのは、各emailIdのレコード数(つまり、{{filteredList.length}}によって返された値でデータを並べ替える)でデータを並べ替えることです。

私は

 <div ng-repeat="(key, value) in leaderboard | groupBy: 'emailId' | orderBy: filtered.length"> 
      <h3>{{ key }} {{ filteredList.length}}</h3> 
      <li ng-repeat="leaderboard in value | filter: emailId as filteredList"></li> 
     </div> 

次のようにNGリピートにORDERBYを追加しようとしているが、これは、項目がリストされているために任意の違いはありません。私は既存の答えを探しましたが、groupByと一緒に作業していないorderByのすべてが、フィルタの長さではなく値に含まれる項目の順序付けを参照しているように見えます。

答えて

0

角フィルタのユーザグループは、リンクの下に何をすべきか書かれている: https://github.com/a8m/angular-filter/issues/57#issuecomment-65041792

groupByは、オブジェクトを返すが、orderBy fiterアレイを期待します。したがって、toArrayを使用して、trueを指定し、orderを使用して作業します。

以下

が働かなければならないコードです:

<div ng-repeat="(key, value) in leaderboard | groupBy: 'emailId' | toArray: true |orderBy: filtered.length"> 
     <h3>{{ key }} {{ filteredList.length}}</h3> 
     <li ng-repeat="leaderboard in value | filter: emailId as filteredList"></li> 
    </div> 

また、ORDERBYは、チェーン内の最後のフィルタでなければならないことに注意してください。

編集

また、[並べ替えとGROUPBYの場所を切り替えることができます。 [並べ替えフィルタが最初の場所である場合、それはソートされ、そのGROUPBYフィルタがのtoArrayせずに初期化した後

例をフィルタリング:

<div ng-repeat="(key, value) in array | orderBy: filtered.length | groupBy: 'emailId'"> 
      <h3>{{ key }} {{ filteredList.length}}</h3> 
      <li ng-repeat="leaderboard in value | filter: emailId as filteredList"></li> 
     </div> 
+0

ありがとうございます。今は動作していますが、私は 'orderBy'を逆にする必要があります。私は ':reverse'を試みましたが、それは違いを生じさせないようです。 – Janbango

+0

''逆転 'ではなく ':true'を使用する必要があります – Janbango

+0

あなたはそうです; –

0

これは、簡単にちょうどその最初の注文グループ化することによって固定することができます。はるかに優れたパフォーマンス。

<div ng-repeat="(key, value) in leaderboard | orderBy: filtered.length" | groupBy: 'emailId'> 
    <h3>{{ key }} {{ filteredList.length}}</h3> 
    <li ng-repeat="leaderboard in value | filter: emailId as filteredList"></li> 
</div>