在即将到来的里程碑尝试解决相关的自定义过滤器功能请求之前,我认为类似于 Material 2 方法的自定义过滤器是不可能的。
您可以将原始表数据对象转换或扩展为表数据的 PrimeNG 特定对象表示,其中每个列定义是(或其他 col defs)是您想要过滤的扁平/连接/CSV(等)表示PrimeNG DataTable/TurboTable filterMatchMode 类型。
您可能不会显示实际的过滤器友好 col def 值。相反,您将从打开过滤器友好列定义字段名称的 ng 模板中的相关原始表数据对象值呈现您喜欢的内容。
我使用这种方法来过滤需要在一行的单个表格单元格中显示的多个值,例如单个产品的货币价格。我在表格中显示堆叠的 div,但允许过滤,就好像它们是 CSV 值列表一样。
// This is actually PrimeNG DataTable but TurboTable approach is similar
<ng-template *ngIf="col.field === 'csvPriceCurrencyCodes'" let-data="rowData" pTemplate="body">
<div *ngFor="let price of data?.prices">
{{ price?.currency }}
</div>
</ng-template>
<ng-template *ngIf="col.field === 'csvPriceAmounts'" let-data="rowData" pTemplate="body">
<div *ngFor="let price of data?.prices">
{{ price?.price | delimitNumber:2 }}
</div>
</ng-template>
另一个例子是,我可以用两个 CSV 字符串中的一个替换一个col.field
类似的名称enabledProduct
,这些字符串表示人们可以输入到 PrimeNG 表过滤器输入中的典型布尔值范围,该输入设置为或者filterMatchMode
contains
但所有在视觉上显示的是已启用项目的巨大复选标记图标。0,n,no,off,false,disabled
1,y,yes,on,true,enabled
(我通常使用文档中列出的 PrimeNG 'Dynamic Columns' 方法。)