The grid object has a groupBy property which you can use to aggregate your data dynamically. Example:
html:
<body ng-controller="MyCtrl">
<button type="button" ng-click="changeGroupBy('name')">Group By Name</button>
<button type="button" ng-click="changeGroupBy('age')">Group By Age</button>
<div class="gridStyle" ng-grid="gridOptions"></div>
</body>
js:
app.controller('MyCtrl', function($scope) {
$scope.myData = [{"name": "Moroni", "age": 50},
{"name": "Tiancum", "age": 53},
{"name": "Jacob", "age": 27},
{"name": "Nephi", "age": 54},
{"name": "Alex", "age": 53},
{"name": "Jhonny", "age": 22},
{"name": "Ben", "age": 11},
],
$scope.gridOptions = {
data: 'myData'
};
$scope.changeGroupBy = function (group) {
$scope.gridOptions.groupBy(group);
}
});
Live example: http://plnkr.co/edit/A0q3c98s8K4h3n83MULE?p=preview