2015-05-20 3 views
9

ui-grid примера на официальном сайте (http://ui-grid.info/docs/#/tutorial/209_grouping) представляют собой функцию группирования, которая выглядит следующим образом: enter image description hereпунктов меню агрегации Удалить из angularjs меню пользовательского интерфейса сетки

Я хотел бы иметь пункт Grouping меню, но не имеют Aggregate единиц (количество, сумма, макс., мин., авг) в меню столбца, и я не мог найти способ их удаления.

Решение, которое я пробовал, переопределяло uiGridGroupingService, предоставляя декоратору для groupingColumnBuilder, но служба не разрешена вообще, и я не могу не задаться вопросом, есть ли более простой способ достичь этого.

Кому-нибудь известно о любом решении этой проблемы?

+0

Единственное, что я знаю о том, что пользовательский интерфейс сетки не очень гибкий атм. Я использовал его, и я попытался понять, как добавить функцию «pin left» без отображения «pin right» (попросил мой клиент) ... и нет никакого способа сделать это. Я почти уверен, что это то же самое для вашей проблемы. Вы должны опубликовать вопрос @ их github. – Okazari

+0

У меня такая же проблема –

ответ

3

Подход декоратора, вероятно, лучший подход в этом случае. Нет опции конфигурации, чтобы удалить это из меню столбца.

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; 
    }) 
}); 
+0

Спасибо, Катир! Это очень хорошая отправная точка. К сожалению, кажется, что функциональность элемента меню группировки больше не работает, потому что она не может решить, кто «служба». Вы знаете способ инъекции? –

+0

О, это было так же просто, как изменить ссылку на службу на $ delegate, что имеет смысл, так как это экземпляр, который мы украшаем. Кажется, сейчас хорошо работает: http://plnkr.co/edit/WuCceTIhavdgVTYuer8R?p=preview :) –

6

Существует вариант агрегации Подавить! Set groupingShowAggregationMenu to false.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для Справка. Ответные ссылки могут стать недействительными, если связанная страница изменится. – bitoiu

+1

@bitoiu: Не так; ответ дал достаточно информации, чтобы довольно легко различить, без функционального URL, что делать, поэтому это не ссылка. –

+0

Я рад этому, но если ссылка отключена, это бесполезный ответ в соответствии с моим комментарием. Он по-прежнему остается только ответом на URL. – bitoiu

12

Она устанавливается истина по умолчанию, так что вы должны определить его в ваших columnDefs

groupingShowAggregationMenu: ложные

+0

Это сработало для меня. Поместил его на каждый столбец, который мне нужен. Благодаря! – Michael

+0

Это было отличное, чистое решение. Помните, что это не настройка сетки, а параметр columnDef. Вы должны поместить это в каждый столбец. – BrianLegg

Смежные вопросы