如何在AngularJS ui-grid的分组网格中显示列页脚?

Posted

技术标签:

【中文标题】如何在AngularJS ui-grid的分组网格中显示列页脚?【英文标题】:How to show column footer in grouped grid in AngularJS ui-grid? 【发布时间】:2015-08-12 17:54:58 【问题描述】:

我正在使用 AngularJS ui-grid 并按照 tutorial 显示网格的列页脚,它工作正常。但是,我在网格中添加分组功能后,列脚消失了。

在 105_footer 教程中,我使用它来聚合列值:

aggregationType: uiGridConstants.aggregationTypes.SUM

在分组的列定义中,我将其添加到聚合列值:

treeAggregation: type: uiGridGroupingConstants.aggregation.SUM

【问题讨论】:

【参考方案1】:

问题是列聚合不知道分组,所以它试图盲目地聚合列中所有可见的行。这可能会导致错误的答案。

这里有两种形式的错误:

    默认情况下,分组会将标签放入文本中 - 例如年龄列中的“最大:30”。聚合则无法聚合。您可以使用 customFinalizerFn 解决此问题,就像我在下面的 plunker 中所做的那样

    聚合只是聚合所有可见行,包括 groupHeader 行。因此,如果您有一个级别的分组,然后扩展所有级别,那么 SUM 聚合最终将是实际值的两倍。如果你有两个级别的分组,那就是三级。

简而言之,我认为在分组中使用列页脚和列级聚合可能是个坏主意。

http://plnkr.co/edit/1znbxELDzeNVK3x3G1c2?p=preview

showGridFooter: true,
showColumnFooter: true,

   name: 'age', treeAggregationType: uiGridGroupingConstants.aggregation.MAX, aggregationType: uiGridConstants.aggregationTypes.avg, width: '20%', customTreeAggregationFinalizerFn: function( aggregation ) aggregation.rendered = aggregation.value;  ,

【讨论】:

【参考方案2】:

正如PaulL 在他的answer 中所说,问题的出现是因为列聚合和分组相互之间造成了问题。

这里最好的办法是删除列聚合。如果您使用诸如 SUM 之类的分组,它将自动在 SUM 的页脚中显示列聚合。我无法理解需要使用单独的列聚合。

你可以在Plunker看到这个:


  name: 'age',
  treeAggregationType: uiGridGroupingConstants.aggregation.MAX,
  width: '20%',

注意:如果您不使用列聚合,您甚至不需要使用 customTreeAggregationFinalizerFn。 (但如果使用单元格过滤器,则需要它)

【讨论】:

以上是关于如何在AngularJS ui-grid的分组网格中显示列页脚?的主要内容,如果未能解决你的问题,请参考以下文章

ui-grid 块内小部件的底部对齐方式

[转]angularjs之ui-grid 使用详解

如何使用 $scope 在 UI-grid 中访问 gridApi?

AngularJS 1.6 + ES6 - 将jquery ui-grid回调数据返回给控制器[duplicate]

AngularJS 1.6 + ES6 - 将jquery ui-grid回调数据返回到控制器[重复]

Angular.js ui-grid 自定义日期过滤器