นอกจากคำตอบที่ยอมรับข้างต้นแล้วฉันได้สร้างตัวกรอง 'groupBy' ทั่วไปโดยใช้ไลบรารี underscore.js
JSFiddle (อัพเดท):
http://jsfiddle.net/TD7t3/
ตัวกรอง
app.filter('groupBy', function() {
return _.memoize(function(items, field) {
return _.groupBy(items, field);
}
);
});
จดบันทึกการโทร วิธีการขีดล่างนี้จะเก็บผลลัพธ์ของฟังก์ชันและหยุดเชิงมุมจากการประเมินนิพจน์ของตัวกรองทุกครั้งดังนั้นจึงป้องกันไม่ให้เชิงมุมถึงขีด จำกัด การวนซ้ำย่อย
html
<ul>
<li ng-repeat="(team, players) in teamPlayers | groupBy:'team'">
{{team}}
<ul>
<li ng-repeat="player in players">
{{player.name}}
</li>
</ul>
</li>
</ul>
เราใช้ตัวกรอง 'groupBy' ของเรากับตัวแปรขอบเขต teamPlayers ในคุณสมบัติ "ทีม" ng-repeat ของเราได้รับชุดค่าผสมของ (คีย์ค่า []) ที่เราสามารถใช้ในการทำซ้ำต่อไปนี้
อัปเดต 11 มิถุนายน 2557
ฉันขยายกลุ่มโดยใช้ตัวกรองเพื่อพิจารณาการใช้นิพจน์เป็นคีย์ (เช่นตัวแปรซ้อน) บริการแยกวิเคราะห์เชิงมุมมีประโยชน์มากสำหรับสิ่งนี้:
ตัวกรอง (พร้อมการสนับสนุนนิพจน์)
app.filter('groupBy', function($parse) {
return _.memoize(function(items, field) {
var getter = $parse(field);
return _.groupBy(items, function(item) {
return getter(item);
});
});
});
ตัวควบคุม (ที่มีวัตถุซ้อนกัน)
app.controller('homeCtrl', function($scope) {
var teamAlpha = {name: 'team alpha'};
var teamBeta = {name: 'team beta'};
var teamGamma = {name: 'team gamma'};
$scope.teamPlayers = [{name: 'Gene', team: teamAlpha},
{name: 'George', team: teamBeta},
{name: 'Steve', team: teamGamma},
{name: 'Paula', team: teamBeta},
{name: 'Scruath of the 5th sector', team: teamGamma}];
});
html (พร้อมนิพจน์ sortBy)
<li ng-repeat="(team, players) in teamPlayers | groupBy:'team.name'">
{{team}}
<ul>
<li ng-repeat="player in players">
{{player.name}}
</li>
</ul>
</li>
JSFiddle:
http://jsfiddle.net/k7fgB/2/