2016-03-03 17 views
6

Mam proste siatki UI z tych opcji:Jak ukryć określone wiersze w tabeli ui na podstawie jej wartości?

$scope.transactionGrid = { 
    enableSorting : true, 
    enableColumnResize : true, 
    enableScrollbars : true, 
    enablePaginationControls : false, 
    minRowsToShow : 6, 
    onRegisterApi : function(gridApi) { 
     $scope.gridEventsApi = gridApi; 
    } 
}; 

chcę ukryć wiersze, które mają określoną wartość, deleted: "y".

$scope.transactionGrid.data = [ 
    { Name: "First", deleted: "y" }, 
    { Name: "Second", deleted: "y" }, 
    { Name: "Third", deleted: "n" }, 
    { Name: "Fourth", deleted: "n" } 
]; 

Bez faktycznej zmiany danych, czy można je odfiltrować z rzędów?

Odpowiedz

5

Jednym ze sposobów jest dostosowanie szablonu repeater-wiersz w celu sprawdzenia wartości określonej dla wiersza i sprawienie, by wiersz pokazywał/ukrywał w ten sposób. Utworzono a Plunkr przedstawiające możliwe rozwiązanie.

Najpierw trzeba stworzyć swój wiersz wartość sprawdzania funkcji:

appScopeProvider: { 
    showRow: function(row) { 
    return row.deleted !== 'y'; 
    } 
}, 

Wtedy dostosowania ich szablon dodając ten czek z ich kolejnością-repeater

$templateCache.put('ui-grid/uiGridViewport', 
    ... 
    ng-if=\"grid.appScope.showRow(row.entity)\" 
    ... 
} 
+0

więc zdarza się, że mam również celltemplate gdzie jestem używając appscope, więc po dodaniu sugerowanego kodu, ta metoda EditTransaction() nie jest nazywana \t \t \t \t "cellTemplate": "

" –

+0

hej, dodałem komórkę z ng-click w tym plunkr http://plnkr.co/edit/AeuT6GqvuoXDDjFpYnWq?p=preview i to działa. czy możesz podać więcej informacji lub stworzyć nie działający plunkr? – CMR

1

Można go ukryć tworząc szablony komórek i ukrywając je w oparciu o wartość wiersza dla każdego pola:

$scope.transactionGrid = { 
    enableSorting : true, 
    enableColumnResize : true, 
    enableScrollbars : true, 
    enablePaginationControls : false, 
    minRowsToShow : 6, 
    onRegisterApi : function(gridApi) { 
     $scope.gridEventsApi = gridApi; 
    } 

    // Column template definitions: 
    columnDefs: [ 
     { 
      name: 'Name', 
      displayName: 'Name', 
      cellTemplate : '<div ng-if="row.entity.deleted">{{row.entity.Name}}</div>' 
     } 
    ] 
}; 

Zrobiłem Plunk do zademonstrować realną technikę rozwiązania tego problemu: https://plnkr.co/edit/XQRC45vaiZCySZYkEGrz?p=preview

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać odnośnik. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ opinia/niskiej jakości-posts/18051278) – Korcholis

0

Wiem, że konkretnie powiedziałeś "bez faktycznej zmiany danych", ale przypisanie przefiltrowanego zbioru danych do siatki nie zmieniłoby zbioru danych, tylko danych dla siatki. Może to być również odpowiednie i prawidłowe rozwiązanie dla innych takich przypadków.

I rozwidlone CMR „s upadać to wykazać: http://plnkr.co/edit/NntwWb?p=preview

Kluczowym elementem jest po prostu dodanie filter podczas przypisywania zestawu danych:

$scope.gridOptions = { 
    data: $scope.myData.filter(function(row) { 
     return row.deleted !== "y"; 
    }) 
};