2015-05-20 18 views
9

Przykład ui-grid na oficjalnej stronie internetowej (http://ui-grid.info/docs/#/tutorial/209_grouping) przedstawia funkcję grupowania, która wygląda tak: enter image description herepozycje menu Usuń agregacja z angularjs menu ui-grid

chciałbym mieć element Grouping menu, ale nie mają wartości Aggregate (liczba, suma, maks., min, śr.) w menu kolumny i nie mogłem znaleźć sposobu na ich usunięcie.

Rozwiązaniem, które próbowałem, było przesłonięcie uiGridGroupingService, przez zapewnienie dekoratora dla GroupingColumnBuilder, ale usługa nie jest w ogóle rozwiązana i nie mogę pomóc, ale zastanawiam się, czy istnieje prostszy sposób osiągnięcia tego.

Czy ktoś wie o jakimkolwiek rozwiązaniu tego problemu?

+0

Jedyną rzeczą, że jestem świadom, że ui-siatka nie jest bardzo elastyczny bankomat. Użyłem go i próbowałem wymyślić, jak dodać funkcję "pin w lewo" bez pokazania "pinezki" (zapytany przez mojego klienta) ... i nie ma sposobu, aby to zrobić. Jestem prawie pewien, że to samo dotyczy twojego problemu. Powinieneś opublikować problem @ ich github. – Okazari

+0

Mam ten sam problem –

Odpowiedz

3

Podejście dekoratora jest prawdopodobnie najlepszym podejściem w tym przypadku. Nie ma opcji konfiguracji, aby usunąć to z menu kolumny.

PS: Dekorator pokazuje tylko elementy łączone.

Oto działający właściciel z podejściem dekoratora.

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

Dziękuję, Kathir! To bardzo dobry punkt wyjścia. Niestety, wydaje się, że funkcja grupowania pozycji menu już nie działa, ponieważ nie może rozstrzygnąć, kim jest "usługa". Czy znasz sposób wstrzykiwania go? –

+0

Och, to było tak proste, jak zmiana odwołania do usługi na $ delegate, co ma sens, ponieważ jest to obiekt, który dekorujemy. Wydaje się, że ładnie działa teraz: http://plnkr.co/edit/WuCceTIhavdgVTYuer8R?p=preview :) –

6

Istnieje opcja agregacji tłumić! Set groupingShowAggregationMenu to false.

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać link do odniesienie. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – bitoiu

+1

@bitoiu: Nie tak; Odpowiedź dała wystarczająco dużo informacji, aby dość łatwo rozpoznać, bez funkcjonalnego URL, co zrobić, więc nie jest to tylko link. –

+0

Cieszę się z tego, ale jeśli link jest offline, jest to bezużyteczna odpowiedź, jak na mój komentarz. To wciąż odpowiedź tylko na adres URL. – bitoiu

12

Jest ustawiony na true domyślnie więc trzeba określić go w columnDefs

groupingShowAggregationMenu: false

+0

To zadziałało dla mnie. Umieściłem go na każdej kolumnie, której potrzebowałem. Dzięki! – Michael

+0

To było świetne, czyste rozwiązanie. Pamiętaj, że nie jest to ustawienie siatki, ale raczej ustawienie columnDef. Trzeba to umieścić w każdej kolumnie. – BrianLegg

Powiązane problemy