Angularjs 角度UI网格-如何自定义聚合行行为
分组时,ng grid会创建外观和行为与常规行不同的分组行。特别是,组行不显示常规列,而是显示aggregateTemplate定义的单个合并行。我试图做的是自定义组行以包含聚合列数据。例如: 列:Angularjs 角度UI网格-如何自定义聚合行行为,angularjs,aggregate,ng-grid,Angularjs,Aggregate,Ng Grid,分组时,ng grid会创建外观和行为与常规行不同的分组行。特别是,组行不显示常规列,而是显示aggregateTemplate定义的单个合并行。我试图做的是自定义组行以包含聚合列数据。例如: 列: 名称|值 数据: 名称1 | 5 名称1 | 5 名称2|1 按名称分组时显示的网格: -名称1 | 10(这是展开的第一组行) --名称1 | 5(这些是实际的数据行) --名称1 | 5(这些是实际的数据行) -名称2 | 1(这是折叠的第二组行) 请注意,组行同时显示两列,其值等于其子行
名称|值
数据:
名称1 | 5
名称1 | 5
名称2|1
按名称分组时显示的网格:
-名称1 | 10(这是展开的第一组行)
--名称1 | 5(这些是实际的数据行)
--名称1 | 5(这些是实际的数据行)
-名称2 | 1(这是折叠的第二组行)
请注意,组行同时显示两列,其值等于其子行的总和。
如果您熟悉ms excel pivot表,那么这正是我尝试模拟的分组类型功能。
这里关于stack overflow()的一个类似问题展示了一个如何进行子聚合计算的示例,但我一直在讨论如何让nggrid像显示带独立列的常规行一样显示输出。看看ng网格代码,这看起来不是一项容易的任务。有人对此有经验吗?
谢谢 这是一个老问题,但我遇到了完全相同的问题,所以我在这里给出了我的解决方案: 我已经在aggregateTemplate中复制了单元格模板,然后调整它以显示箭头,并调用了一个函数来计算聚合值(我只是复制第一行的值,例如,summing、min或max on值可以在列定义中参数化)
groupTemplate=
''
+''
+' '
+“{{aggFc(行,列)}”
+'';
$scope.aggFc=函数(rowAgg,col){
var row=rowAgg.children[0];
if(行实体[col.field]&&col.cellFilter){
console.log(“'”+row.entity[col.field]+“'|”+col.cellFilter);
返回$scope.$eval(“'”+row.entity[col.field]+“|”+col.cellFilter);
}
返回row.entity[列字段]
};
$scope.yourGrid=
{
数据:“…”,
enableCellSelection:false,
enableRowSelection:true,
aggregateTemplate:groupTemplate,
...
我认为这个解决方案可以通过调整“$scope.aggFc”函数来使用,该函数的灵感来自于您提供的链接()要获得总和,您只需将aggFc更改为如下内容:
$scope.get_total= (col,row) ->
# used by the footer template to access column totals.
return $scope.totals[col.field] if _.isUndefined(row)
_.reduce(row.children, ((sum, child) -> sum + child.entity[col.field]), 0)
(假定为咖啡色脚本和下划线)
请注意,我对footer(整个表的总计)和aggrows使用相同的函数。在footer情况下,没有传入任何行,因此返回预先计算的总计。
如果传递了一行,则假定该行是一个聚合,并对该列的子行求和
$scope.get_total= (col,row) ->
# used by the footer template to access column totals.
return $scope.totals[col.field] if _.isUndefined(row)
_.reduce(row.children, ((sum, child) -> sum + child.entity[col.field]), 0)