简体   繁体   English

UI Grid AngularJS:将自定义过滤器应用于页脚

[英]UI Grid AngularJS: Apply a custom filter to a footer

I created a custom filter for my ui-grid that I am exporting as a pdf using ui-grid-exporter that limits decimal numbers to two places, and it works when I export the ui-grid however it does not work within the footer when it is exporter. 我为我的ui-grid创建了一个自定义过滤器,我将使用ui-grid-exporter将pdf导出为pdf,该过滤器将十进制数限制在两个位置,并且当我导出ui-grid时可以使用,但是在页脚中不起作用它是出口商。

Footer Expected: 32.34452436927346234523623462342345 Needed: 32.34 预期页脚:32.34452436927346234523623462342345需要:32.34

Here is the custom filter. 这是自定义过滤器。 This filter works within the ui-grid. 该过滤器在ui-grid中起作用。

app.filter('rentalFilter', function () {
  return function (value, scope) {
    // Only perform logic if the value is actually defined
    if(typeof value != 'undefined') {
        if(value == null || value == "")
            value = 0;
        value = value.toFixed(2);
        if(value >= 0) {
            var parts=value.toString().split(".");
            return parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (parts[1] ? "." + parts[1] : "");
        }
        else {
            value = value * -1.00;
            value = value.toFixed(2);
            var parts=value.toString().split(".");
            return "-" + parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (parts[1] ? "." + parts[1] : "");
        }
    }
  };
});

Here the columns are declared for the ui-grid 在这里为ui-grid声明了列

$scope.columns = [ {
    name : 'parm',
    category : "column1",
    width : '6%',
    enableColumnMenu : false,
    displayName : $scope.rollup
}, {
    name : 'mondayAwrv',
    displayName : 'AWRV',
    cellClass : 'green',
    category : "MONDAY",
    exporterPdfAlign: 'right',
    width : '6%',
    cellFilter : 'number : 2',
    footerCellFilter : 'number : 2',
    aggregationType : uiGridConstants.aggregationTypes.sum,
    aggregationHideLabel : true,
    enableColumnMenu : false
}, {
    name : 'mondayCredit',
    cellClass : function(grid, row, col, rowRenderIndex, colRenderIndex) {
        if (grid.getCellValue(row, col) < 0)
            return 'negative';
        return 'positive'
    },
    category : "MONDAY",
    exporterPdfAlign: 'right',
    width : '6%',
    cellFilter : 'number : 2',
    footerCellFilter : 'number : 2',
    aggregationType : uiGridConstants.aggregationTypes.sum,
    aggregationHideLabel : true,
    enableColumnMenu : false
}, {
    name : 'mondayPer',
    displayName : '%',
    category : "MONDAY",
    exporterPdfAlign: 'right',
    width : '6%',
    cellFilter : 'number : 2',
    footerCellFilter : 'number : 2',
    aggregationType : uiGridConstants.aggregationTypes.avg,
    aggregationHideLabel : true,
    enableColumnMenu : false
}, 
.....
//and so on for other days of the week
];

The export function exports the ui-grid as a pdf. 导出功能将ui-grid导出为pdf。 Numbers are shown with a 2 decimal place limit 数字显示为小数点后两位

$scope.export = function(){
      //$scope.gridApi.exporter.pdfExport( uiGridExporterConstants.ALL, uiGridExporterConstants.ALL );
      var exportData = [];
      var exportColumnHeaders = $scope.gridOptions.showHeader ? uiGridExporterService.getColumnHeaders($scope.gridApi.grid, uiGridExporterConstants.VISIBLE) : [];
      angular.forEach($scope.gridApi.grid.rows, function(row) {
        if (row.visible) {
          var values = [];
          angular.forEach(exportColumnHeaders, function(column) {
            var value = row.entity[column.name];
            if (column.name == 'mondayAwrv' || column.name == 'mondayCredit' || column.name == 'mondayPer' ||
                column.name == 'tuesdayAwrv' || column.name == 'tuesdayCredit' || column.name == 'tuesdayPer' ||
                column.name == 'wednesdayAwrv' || column.name == 'wednesdayCredit' || column.name == 'wednesdayPer' ||
                column.name == 'thursdayAwrv' || column.name == 'thursdayCredit' || column.name == 'thursdayPer' ||
                column.name == 'fridayAwrv' || column.name == 'fridayCredit' || column.name == 'fridayPer') value = $filter('rentalFilter')(value);


            values.push({
              value: value
            });

          });
          exportData.push(values);
        }
      });

      var content = uiGridExporterService.prepareAsPdf($scope.gridApi.grid, exportColumnHeaders, exportData);

      pdfMake.createPdf(content).open();


    }

I am trying to apply the same to the getFooterValue function 我正在尝试将相同的方法应用于getFooterValue函数

$scope.getFooterValue = function(i){        
        return $scope.gridApi.grid.columns[i].getAggregationValue();
//template
    //[ '', {text: ($scope.getFooterValue(1)), alignment: 'right'}, {text: ($scope.getFooterValue(2)), alignment: 'right'},

        /*
        var exportData = [];
          var exportColumnHeaders = $scope.gridOptions.showHeader ? uiGridExporterService.getColumnHeaders($scope.gridApi.grid, uiGridExporterConstants.VISIBLE) : [];
          angular.forEach($scope.gridApi.grid.rows, function(row) {
            if (row.visible) {
              var values = [];
              angular.forEach(exportColumnHeaders, function(column) {
                var value = row.entity[column.name];
                if (column.name == 'mondayAwrv' || column.name == 'mondayCredit' || column.name == 'mondayPer' ||
                    column.name == 'tuesdayAwrv' || column.name == 'tuesdayCredit' || column.name == 'tuesdayPer' ||
                    column.name == 'wednesdayAwrv' || column.name == 'wednesdayCredit' || column.name == 'wednesdayPer' ||
                    column.name == 'thursdayAwrv' || column.name == 'thursdayCredit' || column.name == 'thursdayPer' ||
                    column.name == 'fridayAwrv' || column.name == 'fridayCredit' || column.name == 'fridayPer') value = $filter('rentalFilter')(value);


                values.push({
                  value: value
                });

              });
              exportData.push(values);
            }
          });

          var content = uiGridExporterService.prepareAsPdf($scope.gridApi.grid, exportColumnHeaders, exportData);

          content.pageMargins = [40, 80, 40, 60];   

          //pdfMake.createPdf(content).open();
          return $scope.gridApi.grid.columns[i].getAggregationValue();
        */

    }  

This is what exports the values for the footer. 这就是导出页脚值的原因。

$scope.gridOptions.exporterPdfFooter = {
        margin: [10, 5, 20, 10],    
        table: {

            widths: [ '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%', '6%',],

            body: [
                    [ '', {text: ($scope.getFooterValue(1)), alignment: 'right'}, {text: ($scope.getFooterValue(2)), alignment: 'right'}, {text: ($scope.getFooterValue(3)), alignment: 'right'}, {text: ($scope.getFooterValue(4)), alignment: 'right'}, {text: ($scope.getFooterValue(5)), alignment: 'right'}, {text: ($scope.getFooterValue(6)), alignment: 'right'} ],

            ]         
        }
    };

how can I apply the filter to the footer to limit the 2 decimal points? 如何将过滤器应用于页脚以限制2个小数点?
Any help is much appreciated. 任何帮助深表感谢。

AngularJS has a built in filter for filtering a number by decimal places. AngularJS有一个内置的过滤器,用于按小数位过滤数字。

You could simply pipe this filter after any custom filter. 您可以在任何自定义过滤器之后简单地通过管道传递此过滤器。 Example: 例:

<span>{{myNumber | myCustomFilter | number:2}}</span>

Al I had to do was add the filter to the body within exporterPdfFooter 我要做的就是将过滤器添加到exporterPdfFooter中的主体

body: [
            [{text: $filter('netFilter')($scope.getFooterValue(1))} ],

            ]   

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM