如何在 PRIMENG 中设置 p-columnFilter 的默认值?

Jan*_*rlU 3 primeng angular primeng-datatable p-table

PRIMENG 是 Angular 的组件库,我目前正在使用他们的p-table组件来显示数据库中的数据。表中显示的一列包含一个布尔值,我希望true该列过滤器有一个默认值。

下面是该表的 HTML 示例:

<p-table    class="my-table"
            [value]="(myValues$ | async)!"
            [scrollable]="true"
            scrollHeight="flex"
            [virtualScroll]="true"
            selectionMode="single">
    <ng-template pTemplate="header">
        <tr>
            <th>
                Some Boolean
                <div>
                    <!-- 
                   How can I set the filter to only show
                   items where someBoolean == true by default? 
                    -->
                    <p-columnFilter type="boolean" field="someBoolean"></p-columnFilter>
                </div>
            </th>
        </tr>
    </ng-template>
    <ng-template pTemplate="body" let-val>
        <tr [pSelectableRow]="val">
            <td>
                <i class="pi" [ngClass]="{'true-icon pi-check': val.someBoolean, 'false-icon pi-times': !val.someBoolean}"></i>
            </td>
        </tr>
    </ng-template>
</p-table>
Run Code Online (Sandbox Code Playgroud)

该属性myValues$是一个Observable<MyValue[]>并且MyValue类似于:

export interface MyValue {
    someBoolean: boolean;
}
Run Code Online (Sandbox Code Playgroud)

如何将过滤器设置为仅显示 所在位置的someBoolean项目true

几年前,有人提出了完全相同的问题,但没有人愿意回答,所以我又问了一次。

我尝试在 PRIMENG 文档中查找任何defaultvalue属性,但一无所获。作为一种解决方法,我对从数据库返回的数据进行了预先排序,如下所示:

myValues$: Observable<MyValue[]> = getData().pipe(
  // Sorts by 'someBoolean' where 'true' comes before 'false'
  map(mvs => [...mvs].sort((a, b) => a.someBoolean < b.someBoolean ? 1 : -1))
);
Run Code Online (Sandbox Code Playgroud)

但这当然仍然显示所有数据(只是排序)。如果我可以使用列过滤器的默认值来someBoolean显示is 的数据,我会更喜欢它true

Jou*_*usi 5

可以使用以下属性设置默认过滤器状态Table.filters

import { FilterMetadata } from "primeng/api";
...
readonly filters: { [key in keyof MyValue]: FilterMetadata[] } = {
  someBoolean: [{ value: true, matchMode: "contains", operator: "and" }]
};
Run Code Online (Sandbox Code Playgroud)
<p-table ... [filters]="filters">
  ...
</p-table>
Run Code Online (Sandbox Code Playgroud)

堆栈闪电战