如何解决Angular Slickgrid-customValidator不适用于SingleSelect编辑器
目前,我为angular-slickgrid
启用了单元格的Editors.singleSelect
内联编辑器。我想根据某些条件验证所选的下拉值。我引用了this示例来创建自定义验证器,但没有收到警告消息。
在此example中,以下方法针对Editors.text
而不是Editors.singleSelect
类型触发。
component.ts
itemValidator: EditorValidator = (value: any,args: EditorArgs) => {
// you can get the Editor Args which can be helpful,e.g. we can get the Translate Service from it
const grid = args && args.grid;
const gridOptions = (grid && grid.getOptions) ? grid.getOptions() : {};
const translate = gridOptions.i18n;
// to get the editor object,you'll need to use "internalColumnEditor"
// don't use "editor" property since that one is what SlickGrid uses internally by it's editor factory
const columnEditor = args && args.column && args.column.internalColumnEditor;
// random condition check
const items = ['item1','item2','item3'];
if (items.includes(value)) {
return { valid: false,msg: 'Invalid item' };
}
return { valid: true,msg: '' };
};
......
// ----------------Column definition----------------------------
{
id: 'item',name: 'Item',field: 'item',sortable: true,filterable: true,editor: {
model: Editors.singleSelect,collection: [
{value: 'item1',label: 'Item 1'},{value: 'item2',label: 'Item 2'},{value: 'item3',label: 'Item 3'},{value: 'item4',label: 'Item 4'},{value: 'item5',label: 'Item 5'},{value: 'item6',label: 'Item 6'},{value: 'item7',label: 'Item 7'},],validator: this.itemValidator
}
}
........
// ----------------Prompting alert if any error----------------------------
onValidationError(e,args) {
alert(args.validationResults.msg);
}
component.html
<angular-slickgrid gridId="dataGrid" (onAngularGridCreated)="angularGridReady($event)"
(sgOnBeforeEditCell)="onCellBeforeEditCell($event.detail.eventData,$event.detail.args)"
(sgOnBeforeCellEditorDestroy)="onAfterEditCell($event.detail.eventData,$event.detail.args)"
(sgOnValidationError)="onValidationError($event.detail.eventData,$event.detail.args)"
[columnDefinitions]="colDefn" [gridOptions]="gridOptions"
[dataset]="dataset" [gridHeight]="gridHeight" >
</angular-slickgrid>
如果我将编辑器类型从Editors.singleSelect
更改为Editors.text
,则其验证将按预期进行。
解决方法
请注意,我是Angular-Slickgrid的作者,该错误现已在新版本2.21.3下修复。
以下代码现在有效
prepareGrid() {
this.columnDefinitions = [
{
id: 'complete',name: '% Complete',field: 'percentComplete',type: FieldType.number,editor: {
model: Editors.singleSelect,validator: (value,args) => {
if (value < 50) {
return { valid: false,msg: 'Please use at least 50%' };
}
return { valid: true,msg: '' };
}
}
}
];
}
onValidationError(e,args) {
if (args.validationResults) {
alert(args.validationResults.msg);
}
}
当我选择的值低于50%时将显示此警报。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。