Я использую AgGrid
версию 18.1.0
и Angular 8
.
Я пытаюсь выполнить некоторую базовую проверку Cell Renderer
, но тот факт, что вызывается функция init()
дважды каждый раз, когда вызывается onCellValueChanged()
, это нарушает мою логику проверок.
FUN FACT: init()
вызывается только один раз, если значение, которое вы вводите в редактируемую ячейку, является одним и тем же значением (ПРИМЕР: 123 ---> 123), но дважды, если значение отличается от значениятекущее значение (ПРИМЕР: 123 ---> 321).
Как решить эту проблему, чтобы функция init()
вызывалась только один раз?
Параметры моей сетки ...
this.agGridOptions = {
onGridReady: (grid) => this.onGridReady(grid),
onCellValueChanged: (grid) => this.updateRowItem(grid),
enableSorting: false,
enableFilter: false,
enableColResize: true,
unSortIcon: true,
components : {
'parameterValueValidator' : ParameterValueValidator
}
};
Моя onCellValueChanged()
функция ...
private onGridReady(grid) {
this.grid = grid;
this.gridColumnApi = grid.columnApi;
this.grid.api.sizeColumnsToFit();
}
Мое определение сетки для компонента ...
{
headerName: 'Value',
field: 'paramaterValue',
width: 500,
editable: true,
cellRenderer: 'parameterValueValidator'
},
Вот мой компонент Cell Renderer ...
import * as moment from 'moment';
export class ParameterValueValidator {
public eGui: any;
public getGui() {
return this.eGui;
}
public init(params) {
this.eGui = document.createElement('div');
const dataType = (params.data.parameterDataType.toLowerCase());
const valuesDataType = this.determineDataType(params.data.paramaterValue, dataType);
if (params.data.paramaterValue === '') {
this.eGui.innerHTML = '<p><font size="1" color="red">* Required field </font></p>';
} else if (valuesDataType !== dataType && dataType !== '') {
this.eGui.innerHTML = '<p><font size="1" color="red" class="data-type-mismatch">* Data type "' + dataType + '" does not match value type "' + valuesDataType + '"</font></p>';
params.data.paramaterValue = '';
} else {
this.eGui.innerHTML = params.data.paramaterValue;
}
}
}