javascript - 为单元格渲染器导出 ag-grid 中的数据

标签 javascript angularjs ag-grid

我正在使用 ag-grid,我有一个列定义如下:

{
    headerName: "Color",
    valueGetter: function (params) {
        return JSON.parse(params.data.color).name;
    },
    field: 'color',
    cellRenderer: function (params) {
        if (angular.isDefined(params.data) && angular.isDefined(params.data.color)) {
            var color = JSON.parse(params.data.color);
            return '<div style="width: 50px; height: 18px; background-color:' + color.htmlValue + ';"></div>';
        }
    },
    suppressMenu: true,
    suppressSorting: true
}

当我以 CSV 格式导出网格时,颜色列未定义,这是一个单元格渲染器,我为此搜索了解决方案,并在官方文档中找到了这个:

The raw values, and not the result of cell renderer, will get used, meaning:

  • Cell Renderers will NOT be used.
  • Value Getters will be used.
  • Cell Formatters will NOT be used (use processCellCallback instead).

如您所见,我已经在使用 valueGetter,但我总是在颜色列的导出数据中得到 undefined。

我该如何解决这个问题?

最佳答案

您可以在导出到 CSV 时使用 processCellCallback 来解决它。这样您就可以准确地查看和控制要导出的内容。

除了列定义之外,您还可以将其他参数传递给您的网格选项。

来自农业网格文档:What gets exported

  • The raw values, and not the result of cell renderer, will get used, meaning:

    • ...
    • Cell Formatters will NOT be used (use processCellCallback instead).

那么,假设您在名为 columnDefs 的变量中定义了列。现在您将它传递给您的 gridOptions

const gridOptions = {
  columnDefs: columnDefs,
}

后面的代码应该可以工作。所以,现在您想要处理上下文菜单上的 CSV Export 的点击(如果可能,您也可以使用自定义按钮来完成)。

导出为 CSV:

现在您必须将提供的getContextMenuItems 函数添加到您的gridOptions 对象。更多信息:Configuring the Context Menu

const gridOptions = {
  columnDefs: columnDefs,
  getContextMenuItems() {
    return [
      {
        name: 'CSV Export',
        action: function(params) {
          gridOptions.api.exportDataAsCsv({
            processCellCallback: function(cell) {
              // Manipulate the value however you need.
              return cell.value;
            },
          });
        },
      },
    ];
  },
};

想法是获取CSV Export 并以编程方式添加您需要在action 中发生的内容。在操作中,您需要从 gridOptions.api 调用 exportDataAsCsv 函数。现在(我知道这是大量信息)您可以选择的选项之一是包含 processCellCallback 函数,您可以在其中确保传递单元格值。这样做非常有用,因为您可以根据需要操纵该值(例如,将 $ 符号添加到应该是钱的数字)。

自定义按钮:

如果您需要自定义按钮,则无需多说。您唯一需要做的就是确保在触发 onclick 事件时调用 gridOptions.api 上的 exportDataAsCsv

类似于:

onClick() {
  gridOptions.api.exportDataAsCsv({
    processCellCallback: ...
  });
}

关于javascript - 为单元格渲染器导出 ag-grid 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50153534/

相关文章:

javascript - 使用 Express 和 Angular 将 JSON 数据发送到另一台服务器 (PayU)

javascript - 绑定(bind)到 Angular 中的 Controller 对象

ag-grid - 如何合并Ag-grid的单元格?

angular - ag 网格分页不起作用,最初使服务器调用两次

javascript - 我想将选择框的 ID 传递给 Angular JS 中的函数

angular - 无法让 Angular 2 上的 ag-grid 工作,最近有教程吗?

javascript - 如何在node.js流中写入不重复的数据?

javascript - 在 Javascript 模拟时钟中使用时刻时区

javascript - 点击图片图标,引用REACT.js中的输入类型文件函数

javascript - 为什么在 If 中的 someArray 中做 someVar 总是给出假值