我在代码中使用了ag-grid组件,并希望确保在导出为CSV时根据客户需要格式化日期列。目前使用js Date对象的默认格式。代码可以在这里找到:
https://github.com/ceolter/ag-grid/blob/master/src/ts/csvCreator.ts
我可以直接对代码进行以下更改,但这显然是不好的做法。我对JavaScript很新,并且想知道是否有一种标准方法来扩展/覆盖像这样的库中的功能。
建议的更改(注意这显示我对js版本所做的更改而不是使用ts的github版本):
--- Common/scripts/agGrid/ag-grid.js (revision b0e7d54e61e6371b0cab94428cb4329f9f62db11)
+++ Common/scripts/agGrid/ag-grid.js (revision )
@@ -1848,7 +1848,11 @@
+ var exportDateAs = function(dt){if (dt instanceof Date)
+ return dt.getFullYear() + "/" + (dt.getMonth()+1) + "/" + dt.getDate();
+ };
@@ -1883,6 +1887,9 @@
+ if (valueForCell instanceof Date){
+ valueForCell = exportDateAs(valueForCell);
+ }
答案 0 :(得分:1)
看起来此功能是在较新版本中添加的: https://www.ag-grid.com/javascript-grid-export/
答案 1 :(得分:0)
我的解决方案是手动更新ag网格组件中的功能,如下所示。它似乎有效,但不确定它是否是最佳做法。有谁愿意评论?
用我自己的对象替换对象中的函数:
ag.grid.CsvCreator.prototype.getDataAsCsv = agCustom.getDataAsCsv;
新功能
var agCustom;
(function (agCustom) {
// This is a modified version of the getDataAsCsv from
// agGrid to allow date formatting in csv export
agCustom.getDataAsCsv = function (params) {
var LINE_SEPARATOR = '\r\n';
...
var exportDateAs = function(dt){if (dt instanceof Date)
return dt.getFullYear() + "/" + (dt.getMonth()+1) + "/" + dt.getDate();
...
else {
valueForCell = _this.valueService.getValue(column.colDef, node.data, node);
if (valueForCell instanceof Date){
valueForCell = exportDateAs(valueForCell);
}
...
})(agCustom || (agCustom = {}));