Функция агрегации Ag Grid с помощью Valuegetter - PullRequest
0 голосов
/ 03 марта 2020

В AgGrid я пытаюсь использовать функции агрегации и получения значений в одном столбце. Кажется, что из-за 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;
}

1 Ответ

0 голосов
/ 02 апреля 2020

Ваш 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», я предполагаю, что вы имеете дело с деньгами. Вы не должны зависеть от типа денежного числа Javascript, так как это, по сути, «число с плавающей точкой», и будут возникать ошибки округления. Есть много статей о том, как правильно обрабатывать денежные значения в Javascript - я лично использую порт Javascript класса Java BigDecimal, называемый 'big. js' , но Есть несколько других решений.

Редактировать - также будьте осторожны с использованием if на number - оно оценивается как false, если число равно нулю. Если это то, что вы хотите, хорошо, но если это не так, настройте свою логику c соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...