问题陈述
我需要更改 angular-slickgrid 中的光滑网格行过滤器功能中的 contains 运算符的符号。
我尝试过的是更改所有字段类型的列定义内的compoundOperatorList 中的运算符,但它引发错误 Type *'"a"' 不可分配给类型 'OperatorType |运算符字符串'。
注意:其中“a”是我试图更改包含运算符的符号
请注意,我是 Angular-Slickgrid 和 Slickgrid-Universal 的作者。
大多数类都是可扩展的,因为它们是 TypeScript 类,并且我特意使用
protected
(而不是 private
),这使得所有内容都可以扩展。然而,对于 operator
,它是一个定义列表,您无法更改,因为这会破坏库。 operator
的当前列表如下(参考operatorString.type.ts
)
export type OperatorString = '' | '<>' | '!=' | '=' | '==' | '>' | '>=' | '<' | '<=' | '*' | 'a*' | '*z' | 'EQ' | 'GE' | 'GT' | 'NE' | 'LE' | 'LT' | 'IN' | 'NIN' | 'NOT_IN' | 'IN_CONTAINS' | 'NIN_CONTAINS' | 'NOT_IN_CONTAINS' | 'NOT_CONTAINS' | 'Not_Contains' | 'CONTAINS' | 'Contains' | 'EndsWith' | 'StartsWith' | 'RangeInclusive' | 'RangeExclusive' | 'IN_COLLECTION' | 'NOT_IN_COLLECTION';
您在问题中也犯了一个错误,
a*
相当于StartsWith
NOTContains
(这是默认值,是一个空字符串)。如果您尝试将 a*
更改为其他内容,则库会将其识别为无效 operator
并且将无法工作。
那么这是否意味着你什么也做不了?答案是否定的,您可以创建一个自定义过滤器,使其按照您想要的方式运行。我知道这需要大量工作,但这是唯一可能的解决方案,因为再次
operator
是一个已定义的列表,您无法在不破坏库的情况下进行更改。
你可以看一下 Angular-Slickgrid 示例 3,标题为“标题,自定义编辑器”的列同时使用了自定义编辑器和自定义过滤器。
我也许可以添加一种在将来提供替代文本的方法,即不总是使用
operator
作为复合下拉列表中显示的文本,但这是对未来版本的功能请求。就像今天一样,除非您创建自己的自定义过滤器,否则您无法更改它
编辑
在一两周后发布的下一个 Angular-Slickgrid v6.5 中,您将能够通过以下网格选项更改任何操作符文本或其描述
this.gridOptions = {
compoundOperatorAltTexts: {
numeric: { '=': { operatorAlt: 'eq', descAlt: 'alternate numeric equal description' } },
text: { '=': { operatorAlt: 'eq', descAlt: 'alternate text equal description' } }
},
}
请注意,如果您希望它们正确对齐,
operatorAlt
不应超过 2 个字符(也可能是 3 个)。如果您显示的字符超过 2-3 个,那么您将必须调整 CSS 样式
例如,将
=
更改为 eq
并提供不同的描述