PrimeNG 数据表按列过滤 - 外部文本框输入
PrimeNG datatable filter by column - External textbox input
PrimeNg 数据表使用内置 [filter]="true"
。这将在内部创建一个用于过滤数据的输入文本框。我怎样才能将这个 textbox
放在 datatable
之外并为特定列完成筛选?
与展示柜中的示例完全一样。
在搜索了整个primeng 文档后,我发现primeng 目前不支持此功能。我们将不得不自己归档数据并更新 prime ng 数据表 [value]
模型。
下面是用于过滤 primeng 数据表的带有外部下拉列表的代码。
html 页数:
<!-- Top of the page -->
<div>
<p-dropdown [options]="orgs" [(ngModel)]="selectedOrg" (onChange)="updateOrgFilter(dt);getFilteredOutput($event,dt)" styleClass="ui-column-filter"></p-dropdown>
</div>
<!-- Pie Chart -->
<!-- Bar Chart -->
<!-- Datatable -->
<p-dataTable #dt [value]="itemslist" [rows]="30" [paginator]="true" [rowsPerPageOptions]="[30,50,75]" sortMode="multiple" scrollable="true" resizableColumns="true" scrollHeight="350px">
<p-header>
<div class="ui-helper-clearfix">
List of Items
</div>
</p-header>
<p-column [style]="{'width':'100px'}"field="wipJobNum" header ="Title" [sortable]="true" [filter]="true" ></p-column>
<p-column [style]="{'width':'150px'}"field="partNum" header ="Part Number" [sortable]="true" [filter]="true" ></p-column>
<p-column [style]="{'width':'90px'}" field="org" header ="Org" [sortable]="true" [filter]="true" filterMatchMode="equals">
<ng-template pTemplate="filter" let-col>
<p-dropdown [options]="orgs" [(ngModel)]="selectedOrg" appendTo="body" [style]="{'width':'100%'}" (onChange)="dt.filter($event.value,col.field,col.filterMatchMode);getFilteredOutput(event,dt)" styleClass="ui-column-filter"></p-dropdown>
</ng-template>
</p-column>
</p-dataTable>
component.ts:
updateOrgFilter(dt) {
dt.filter(this.selectedOrg, 'org', 'equals');
}
在此示例中,如果您更改数据表内 org 下拉列表的值,则外部下拉列表将更改并且我的图表将更新。
如果您更改外部下拉值,那么 primeng 数据表过滤器将被更新并显示过滤后的输出 + 图表将被更新。
请看https://www.primefaces.org/primeng/#/table/filter
如果将 dt.filterGlobal($event.target.value, 'contains')
替换为 dt.filter($event.target.value, 'your field name','contains')
,数据表将使用该字段进行过滤。
如果您有外部搜索字段,请从事件处理程序中调用相同的函数。
PrimeNg 数据表使用内置 [filter]="true"
。这将在内部创建一个用于过滤数据的输入文本框。我怎样才能将这个 textbox
放在 datatable
之外并为特定列完成筛选?
与展示柜中的示例完全一样。
在搜索了整个primeng 文档后,我发现primeng 目前不支持此功能。我们将不得不自己归档数据并更新 prime ng 数据表 [value]
模型。
下面是用于过滤 primeng 数据表的带有外部下拉列表的代码。
html 页数:
<!-- Top of the page -->
<div>
<p-dropdown [options]="orgs" [(ngModel)]="selectedOrg" (onChange)="updateOrgFilter(dt);getFilteredOutput($event,dt)" styleClass="ui-column-filter"></p-dropdown>
</div>
<!-- Pie Chart -->
<!-- Bar Chart -->
<!-- Datatable -->
<p-dataTable #dt [value]="itemslist" [rows]="30" [paginator]="true" [rowsPerPageOptions]="[30,50,75]" sortMode="multiple" scrollable="true" resizableColumns="true" scrollHeight="350px">
<p-header>
<div class="ui-helper-clearfix">
List of Items
</div>
</p-header>
<p-column [style]="{'width':'100px'}"field="wipJobNum" header ="Title" [sortable]="true" [filter]="true" ></p-column>
<p-column [style]="{'width':'150px'}"field="partNum" header ="Part Number" [sortable]="true" [filter]="true" ></p-column>
<p-column [style]="{'width':'90px'}" field="org" header ="Org" [sortable]="true" [filter]="true" filterMatchMode="equals">
<ng-template pTemplate="filter" let-col>
<p-dropdown [options]="orgs" [(ngModel)]="selectedOrg" appendTo="body" [style]="{'width':'100%'}" (onChange)="dt.filter($event.value,col.field,col.filterMatchMode);getFilteredOutput(event,dt)" styleClass="ui-column-filter"></p-dropdown>
</ng-template>
</p-column>
</p-dataTable>
component.ts:
updateOrgFilter(dt) {
dt.filter(this.selectedOrg, 'org', 'equals');
}
在此示例中,如果您更改数据表内 org 下拉列表的值,则外部下拉列表将更改并且我的图表将更新。 如果您更改外部下拉值,那么 primeng 数据表过滤器将被更新并显示过滤后的输出 + 图表将被更新。
请看https://www.primefaces.org/primeng/#/table/filter
如果将 dt.filterGlobal($event.target.value, 'contains')
替换为 dt.filter($event.target.value, 'your field name','contains')
,数据表将使用该字段进行过滤。
如果您有外部搜索字段,请从事件处理程序中调用相同的函数。