MrS*_*Scf 0 ag-grid ag-grid-valuesetter ag-grid-validation
有没有ag-grid
比用更好的方法来验证行valueSetter
?
我可以通过它来完成验证,但是不确定是否有更好的方法。
https://www.ag-grid.com/javascript-grid-value-setters/#properties-for-setters-and-parsers
我要验证行中的两个字段。DateFrom和DateUntil(不允许为null,DateFrom必须小于DateUntil)。
有两种可能的验证处理方式:
第一:通过ValueSetter
功能
和
第二:通过自定义cellEditor
组件
我建议最好将自定义之间的逻辑分开 components
,但是正如您所说的,您需要在它们之间验证两个单元格值。
从UI角度来看,在这种情况下,您可以尝试将它们合并到一个单元格中,并且仅通过一个组件即可轻松地使用值。
您可以覆盖 valueSetter 并调用 grid api 事务更新。
这是伪代码,展示了如何实现这一点。
valueSetter: params => {
validate(params.newValue, onSuccess, onFail);
return false;
};
validate = (newvalue, success, fail) => {
if (isValid(newValue)) {
success();
} else {
fail();
}
};
onSuccess = () => {
// do transaction update to update the cell with the new value
};
onFail = () => {
// update some meta data property that highlights the cell signalling that the value has failed to validate
};
Run Code Online (Sandbox Code Playgroud)
这样你也可以进行异步验证。这是一个异步值设置器的真实示例,它具有成功、失败和验证处理程序,这些处理程序在验证完成时执行事务更新。
const asyncValidator = (
newValue,
validateFn,
onWhileValidating,
onSuccess,
_onFail
) => {
onWhileValidating();
setTimeout(function() {
if (validateFn(newValue)) {
onSuccess();
} else {
_onFail();
}
}, 1000);
};
const _onWhileValidating = params => () => {
let data = params.data;
let field = params.colDef.field;
data[field] = {
...data[field],
isValidating: true
};
params.api.applyTransaction({ update: [data] });
};
const _onSuccess = params => () => {
let data = params.data;
let field = params.colDef.field;
data[field] = {
...data[field],
isValidating: false,
lastValidation: true,
value: params.newValue
};
params.api.applyTransaction({ update: [data] });
};
const _onFail = params => () => {
let data = params.data;
let field = params.colDef.field;
data[field] = {
...data[field],
isValidating: false,
lastValidation: params.newValue
};
params.api.applyTransaction({ update: [data] });
};
const asyncValidateValueSetter = validateFn => params => {
asyncValidator(
params.newValue,
validateFn,
_onWhileValidating(params),
_onSuccess(params),
_onFail(params)
);
return false;
};
Run Code Online (Sandbox Code Playgroud)
这是一个代码运行器示例,显示了此操作:https ://stackblitz.com/edit/async-validation-ag-grid-final