2015-11-17 17 views
5

Ich möchte gefilterte Daten aus einem UI-Grid abrufen, wenn die Paging-Funktion aktiviert ist. Im allgemeinen Fall verwenden ichSo erhalten Sie gefilterte Daten aus dem ausgelagerten ui-grid

$scope.gridApi.core.on.filterChanged($scope, function() { 

       if ($scope.gridApi.grid.columns[1].filter.term != "" && $scope.gridApi.grid.columns[1].filter.term != undefined) { 
        var dd =$scope.gridApi.core.getVisibleRows($scope.gridApi.grid); 
        console.log(dd); 
      }); 

aber der Code gut funktioniert nicht, wenn das Paging aktiviert ist, werden nur die Zeilen der ersten Seite zurückzukehren. aber ich brauche alle gefilterten Daten.

Die einfachste Lösung ist eine Filterdatenquelle, die auf dem Filterausdruck basiert, aber die Leistung drastisch verringert.

irgendein Rat?

Antwort

8

Hinweis: Ich habe es nicht mit Seitenumbruch versucht, nur Gruppierung, aber hoffe, es gibt Ihnen einen Hinweis.


Versuchen Sie, das Ereignis rowsVisibleChanged zusammen mit dem Ereignis filterChanged zu verwenden. Sie müssen beide verwenden, denn wenn Sie das Ereignis filterChanged allein verwenden, wird es nicht funktionieren, da es gestartet wird, bevor die Zeilen tatsächlich gefiltert werden. Ich verwende eine Flag-Variable (filterChanged), um zu wissen, ob ein Filter geändert wurde.

Dann, so etwas wie lodash verwenden, um die $scope.gridApi.grid.rows zu filtern, die die Eigenschaft haben, visible auf true:

// UI-Grid v.3.0.7 
var filterChanged = false; 

$scope.gridApi.core.on.filterChanged($scope, function() { 
    filterChanged = true; 
}); 

$scope.gridApi.core.on.rowsVisibleChanged($scope, function() { 
    if(!filterChanged){ 
     return; 
    } 
    filterChanged = false; 
    // The following line extracts the filtered rows 
    var filtered = _.filter($scope.gridApi.grid.rows, function(o) { return o.visible; }); 
    var entities = _.map(filtered, 'entity'); // Entities extracted from the GridRow array 
}); 
+0

Funktioniert perfekt – Gajotres

2

ich in der Lage war, über uiGridExporterService Service über alle Paginierung gefilterten Daten zu exportieren. Danke an @ Patricios obige Antwort für den Hinweis.

//you can set it to ALL or VISIBLE or SELECTED 
var columnsDownloadType = uiGridExporterConstants.ALL; 

//get all the visible rows across all paginations 
var filtered = _.filter(grid.api.grid.rows, function (o) { 
    return o.visible; 
}); 

//get the entities of each of the filtered rows 
var entities = _.map(filtered, 'entity'); 

//get all or visible column headers of this grid depending on the columnsDownloadType 
var exportColumnHeaders = grid.options.showHeader ? uiGridExporterService.getColumnHeaders(grid, columnsDownloadType) : []; 

var exportData = []; 
/**this lodash for-each loop will covert the grid data into below array of array format 
* [[{value:'row1col1value'},{value:'row1col2value'}],[{value:'row2col1value'},{value:'row2col2value'}].....] 
* uiGridExporterService.formatAsCsv expects it in this format 
**/ 
_.each(entities, function (row) { 
    var values = []; 
    _.each(exportColumnHeaders, function (column) { 
     var value = row[column.name]; 
     values.push({value: value}); 
    }); 
    exportData.push(values); 
}); 

//format the header,content in csv format 
var csvContent = uiGridExporterService.formatAsCsv(exportColumnHeaders, exportData, ','); 

//export as csv file 
uiGridExporterService.downloadFile(grid.options.exporterCsvFilename, csvContent, grid.options.exporterOlderExcelCompatibility); 
0

Ich habe versucht, die benutzerdefinierte Exporteur und es hat funktioniert!

  • Voraussetzungen:

    enableSelectAll:true, 
    multiSelect:true, 
    
  • Ihr Controller benötigt:

    uiGridExporterService,uiGridExporterConstants 
    
  • App Modul benötigt:

    "ui.grid.selection" ,"ui.grid.exporter" 
    
    $scope.exportCSV = function(){ 
            var exportService=uiGridExporterService; 
            var grid=$scope.gridApi.grid; 
            var fileName="myfile.csv"; 
    
            exportService.loadAllDataIfNeeded(grid, uiGridExporterConstants.ALL, uiGridExporterConstants.VISIBLE).then(function() { 
             var exportColumnHeaders = exportService.getColumnHeaders(grid, uiGridExporterConstants.VISIBLE); 
    
             $scope.gridApi.selection.selectAllVisibleRows(); 
    
             var exportData = exportService.getData(grid, uiGridExporterConstants.SELECTED,uiGridExporterConstants.VISIBLE); 
             var csvContent = exportService.formatAsCsv(exportColumnHeaders, exportData, grid.options.exporterCsvColumnSeparator); 
             exportService.downloadFile(fileName, csvContent, grid.options.exporterOlderExcelCompatibility); 
             $scope.gridApi.selection.clearSelectedRows(); 
            }); 
            } 
    
Verwandte Themen