从AngularJS UI-Grid菜单中删除聚合菜单项。

8
官方网站上的ui-grid示例(http://ui-grid.info/docs/#/tutorial/209_grouping)展示了一个分组功能,如下图所示: enter image description here 我想要有Grouping菜单项,但不想在列菜单中有Aggregate(count,sum,max,min,avg)选项,并且我找不到删除它们的方法。
我尝试的解决方案是通过为groupingColumnBuilder提供装饰器来覆盖uiGridGroupingService,但服务根本没有被解析,我不禁想知道是否有更简单的方法来解决这个问题。
是否有人知道该问题的任何解决方案?

我所了解的唯一一件事是,目前ui-grid并不是非常灵活。 我使用过它,并尝试了解如何添加“固定左侧”功能,而不显示“固定右侧”(我的客户要求)...但没有办法做到这一点。 我相信你的问题也是类似的。您应该在他们的github中发布一个issue。 - Okazari
我遇到了同样的问题。 - Devin McQueeney
3个回答

13

它默认为true,因此您需要在columnDefs中指定它

groupingShowAggregationMenu: false


注:这段话涉及IT技术相关内容,其中的变量和参数名已经是英文状态。

这对我有效。我把它放在了每个需要的 columnDef 上。谢谢! - Michael
这是一个非常好的、干净的解决方案。请记住,这不是网格设置,而是列定义设置。您必须在每一列上都加上这个。 - BrianLegg

7

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面发生更改,则仅链接的答案可能会失效。 - bitoiu
1
@bitoiu:并非如此;答案提供了足够的信息,使人们可以相对容易地辨别出该怎么做,因此它不是仅有链接。 - Nathan Tuggy
我对此感到高兴,但如果链接离线,那么这个回答就毫无意义了,正如我的评论所述。它仍然是一个仅包含URL的回答。 - bitoiu

2
装饰器方法可能是这种情况下最好的方法。没有配置选项可以从列菜单中移除它。PS: 装饰器仅用于删除聚合项。这是一个使用装饰器方法的有效plnkr。 http://plnkr.co/edit/nzBeqbmEVUwmZF0qgyd6?p=preview
app.config(function($provide){
    $provide.decorator('uiGridGroupingService', function ($delegate,i18nService,gridUtil) {

        $delegate.groupingColumnBuilder = function (colDef, col, gridOptions) {

          if (colDef.enableGrouping === false){
            return;
          }

          if ( typeof(col.grouping) === 'undefined' && typeof(colDef.grouping) !== 'undefined') {
            col.grouping = angular.copy(colDef.grouping);
          } else if (typeof(col.grouping) === 'undefined'){
            col.grouping = {};
          }

          if (typeof(col.grouping) !== 'undefined' && typeof(col.grouping.groupPriority) !== undefined && col.grouping.groupPriority >= 0){
            col.suppressRemoveSort = true;
          } 

          col.groupingSuppressAggregationText = colDef.groupingSuppressAggregationText === true;

          var groupColumn = {
            name: 'ui.grid.grouping.group',
            title: i18nService.get().grouping.group,
            icon: 'ui-grid-icon-indent-right',
            shown: function () {
              return typeof(this.context.col.grouping) === 'undefined' || 
                     typeof(this.context.col.grouping.groupPriority) === 'undefined' ||
                     this.context.col.grouping.groupPriority < 0;
            },
            action: function () {
              service.groupColumn( this.context.col.grid, this.context.col );
            }
          };

          var ungroupColumn = {
            name: 'ui.grid.grouping.ungroup',
            title: i18nService.get().grouping.ungroup,
            icon: 'ui-grid-icon-indent-left',
            shown: function () {
              return typeof(this.context.col.grouping) !== 'undefined' && 
                     typeof(this.context.col.grouping.groupPriority) !== 'undefined' &&
                     this.context.col.grouping.groupPriority >= 0;
            },
            action: function () {
              service.ungroupColumn( this.context.col.grid, this.context.col );
            }
          };



          if (!gridUtil.arrayContainsObjectWithProperty(col.menuItems, 'name', 'ui.grid.grouping.group')) {
            col.menuItems.push(groupColumn);
          }

          if (!gridUtil.arrayContainsObjectWithProperty(col.menuItems, 'name', 'ui.grid.grouping.ungroup')) {
            col.menuItems.push(ungroupColumn);
          }
        }
        return $delegate;
    })
});

谢谢你,Kathir!这是一个非常好的起点。不幸的是,由于无法确定“service”是谁,所以分组菜单项功能似乎已经无法使用了。你知道是否有注入它的方法吗? - Cristina_eGold
哦,原来只需要将服务引用更改为$delegate就可以了,这很有道理,因为这是我们正在装饰的实例。现在看起来工作得很好:http://plnkr.co/edit/WuCceTIhavdgVTYuer8R?p=preview :) - Cristina_eGold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接