2016-07-05 77 views
1

使用angular.filter我使用GROUPBY和長度給我的用戶登錄記錄數的計數EMAILIDAngularJS GROUPBY排序依據

  <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> 

這一切工作正常給我emailIds,該列表每個emailId的記錄數和下面列出的記錄。

我試圖做的是按每個emailId的記錄數量排序數據(換句話說,按{{filteredList.length}}返回的值排序數據)。

我已經嘗試添加排序依據的NG-重複如下

 <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> 

,但這不會對項目的排列順序有什麼區別。我查看了一個現有的答案,但是所有的orderBy不與groupBy一起工作似乎指的是由包含在該值中的項目排序而不是過濾器的長度。

回答

0

角濾波器的用戶組已經寫需要在低於鏈路做什麼: https://github.com/a8m/angular-filter/issues/57#issuecomment-65041792

groupBy返回一個對象但orderBy fiter期望的陣列。所以使用toArray:true,並給orderBy一個數組來處理。

下面是必須努力代碼:

<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過濾器初始化沒有指定者過濾

例子:

<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',但它似乎沒有什麼區別。可以'反向'與'toArray'一起使用 – Janbango

+0

它可以,我需要使用':true'而不是':reverse' – 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>