6

Ich habe ein einfaches UI-Raster mit diesen Optionen:Wie verstecke ich bestimmte Zeilen in einem UI-Grid basierend auf seinen Werten?

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

Ich mag Zeilen verstecken, die einen bestimmten Wert haben, deleted: "y".

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

Ohne tatsächlich die Daten zu ändern, kann es aus Zeilen herausgefiltert werden?

Antwort

5

Eine Möglichkeit besteht darin, die Zeilenrepeater-Vorlage so anzupassen, dass sie nach einem zeilenspezifischen Wert sucht und die Zeile so ein-/ausblenden lässt. Ich erstellte a Plunkr präsentiert eine mögliche Lösung.

Zuerst müssen Sie Ihre Zeilenwert-Checker-Funktion erstellen:

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

Dann stellen Sie ihre Vorlage durch, dass der Check ihrer Zeilen Repeater Hinzufügen

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

so kommt es, dass ich auch eine Celltemplate, wo ich bin appscope verwenden, so dass nach dem Code hinzufügen, die Sie vorgeschlagen, diese Methode EditTransaction() nicht \t \t \t \t „Celltemplate“ genannt wird: „

“ –

+0

hey, habe ich ein Celltemplate mit ng-Klick in diesem plunkr http://plnr.co/edit/AeuT6GqvuoXDDjFpYnWq?p=preview und es funktioniert. Kannst du mehr Infos liefern oder einen nicht funktionierenden Plunkr erstellen? – CMR

1

Sie es verstecken durch Zellvorlagen erstellen und verstecken es für jedes Feld auf Zeilenwert basiert:

$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>' 
     } 
    ] 
}; 

ich Plunk gemacht demonstrieren Sie eine praktikable Technik, um dies zu lösen: https://plnkr.co/edit/XQRC45vaiZCySZYkEGrz?p=preview

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18051278) – Korcholis

0

Ich weiß, dass Sie speziell gesagt, "ohne tatsächlich die Daten zu ändern", aber ein gefiltertes Dataset dem Raster zuweisen würde nicht das Dataset ändern, nur die Daten für das Raster. Es könnte auch eine relevante und gültige Lösung für andere Fälle sein.

ich gegabelt CMR ‚s Plunk dies zu demonstrieren: http://plnkr.co/edit/NntwWb?p=preview

Der wichtigste Teil nur ein filter hinzuzufügen, wenn die Datenmenge zuweisen:

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