带有 Valuegetter 的 Ag Grid 聚合函数
Ag Grid aggregation function with Valuegetter
在 AgGrid 中,我尝试在同一列上使用聚合函数和 valuegetter。似乎是因为 valuegetter,我的聚合函数不起作用,我在聚合时只得到 0 或空值。您能否检查我的代码是否有任何可能的解决方案?
谢谢
{ headerName: "Price", filter: "agNumberColumnFilter", valueGetter: priceValueGetter, allowedAggFuncs: ['avg', 'sum', 'min', 'max']};
function priceValueGetter(params) {
var value = '';
if (params.data) {
var EPrice = params.data.a;
var p1 = params.data.b;
if (EPrice && p1) {
value = (EPrice - p1).toFixed(2);
}
}
return value;
}
您的 valueGetter 正在返回一个字符串。
因此,期望数字的内置聚合函数失败了。
改用这个 valueGetter:
function priceValueGetter(params): number {
if (params.data && params.data.a && params.data.b) {
return params.data.a - params.data.b
}
return null;
}
这不会按照您想要的方式格式化,但您可以通过添加 valueFormatter 来解决这个问题。
另一条建议 - 鉴于您有一个名为 'EPrice' 的变量,我假设您正在处理金钱。您不应该依赖 Java 脚本的原生 'number' 类型来赚钱,因为它本质上是 'float',并且会出现舍入错误。有很多关于如何在 Java 脚本中正确处理货币值的文章 - 我个人使用 Java BigDecimal class 的 Java 脚本端口,称为 'big.js',但还有其他几种解决方案。
编辑 - 在 number
上使用 if
时也要小心 - 如果数字为零,它的计算结果为 false
。如果那是你想要的,那很好,但如果不是,请相应地调整你的逻辑。
在 AgGrid 中,我尝试在同一列上使用聚合函数和 valuegetter。似乎是因为 valuegetter,我的聚合函数不起作用,我在聚合时只得到 0 或空值。您能否检查我的代码是否有任何可能的解决方案? 谢谢
{ headerName: "Price", filter: "agNumberColumnFilter", valueGetter: priceValueGetter, allowedAggFuncs: ['avg', 'sum', 'min', 'max']};
function priceValueGetter(params) {
var value = '';
if (params.data) {
var EPrice = params.data.a;
var p1 = params.data.b;
if (EPrice && p1) {
value = (EPrice - p1).toFixed(2);
}
}
return value;
}
您的 valueGetter 正在返回一个字符串。 因此,期望数字的内置聚合函数失败了。
改用这个 valueGetter:
function priceValueGetter(params): number {
if (params.data && params.data.a && params.data.b) {
return params.data.a - params.data.b
}
return null;
}
这不会按照您想要的方式格式化,但您可以通过添加 valueFormatter 来解决这个问题。
另一条建议 - 鉴于您有一个名为 'EPrice' 的变量,我假设您正在处理金钱。您不应该依赖 Java 脚本的原生 'number' 类型来赚钱,因为它本质上是 'float',并且会出现舍入错误。有很多关于如何在 Java 脚本中正确处理货币值的文章 - 我个人使用 Java BigDecimal class 的 Java 脚本端口,称为 'big.js',但还有其他几种解决方案。
编辑 - 在 number
上使用 if
时也要小心 - 如果数字为零,它的计算结果为 false
。如果那是你想要的,那很好,但如果不是,请相应地调整你的逻辑。