2015-11-17 13 views
5

Sayfalama özelliği etkinleştirildiğinde, bir ui-grid'den filtrelenmiş veri almak istiyorum. Genel durumda ben Disk belleği ui-grid'den filtrelenmiş veriler nasıl alınır?

$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); 
      }); 

kullanılan ancak kod iyi çalışmaz sayfalama etkinleştirildiğinde, ilk sayfanın yalnızca satırları döndürür. ancak tüm filtrelenmiş verilere ihtiyacım var.

En kolay çözüm, filtre terimine bağlı olarak filtre veri kaynağıdır ancak performansı önemli ölçüde azaltır.

herhangi bir öneri?

cevap

8

Not: Sadece gruplama ile sayfalama ile denemedim, ama umarım size bir ipucu verir.


filterChanged olayıyla birlikte rowsVisibleChanged olayını kullanmayı deneyin. Her ikisini de kullanmanız gerekir çünkü tek başına filterChanged olayını kullanırsanız, satırlar filtrelenmeden önce başlatıldığından çalışmayacaktır. Bir filtrenin değiştirilip değiştirilmediğini öğrenmek için bir bayrak değişkeni (filterChanged) kullanıyorum.

Sonra true ayarlı visible özelliği vardır $scope.gridApi.grid.rows filtrelemek için lodash gibi bir şey kullanın:

// 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

Mükemmel çalışır – Gajotres

2

Ben uiGridExporterService servisi ile tüm pagination genelinde filtrelenmiş verileri dışa başardı. @ Patricio'nun ipucu için yukarıdaki cevabı sayesinde.

//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

Özel ihracatçıyı denedim ve işe yaradı!

  • Önkoşullar:

    enableSelectAll:true, 
    multiSelect:true, 
    
  • Denetleyiciniz gerekir:

    uiGridExporterService,uiGridExporterConstants 
    
  • uygulama modülü gerekir:

    "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(); 
            }); 
            } 
    
İlgili konular