如何更改 primeNG 数据表 p 列过滤器日期格式?
How to change primeNG datatable p-column filter date format?
按日期过滤时如何以及是否可以更改日期格式?
<p-columnFilter type="date" [field]="col.field" display="menu">
默认格式是mm/dd/yyyy但是我想实现dd/mm/yyyy
如果你使用的是“p-columnFilter”组件,这意味着你在p-table里面,你想根据filter
过滤值
你可以用这个:
<p-table dataKey="id">
<ng-template pTemplate="header">
<tr>
<th>Data</th>
<th>Name</th>
</tr>
<tr>
<th>
<p-columnFilter type="date" field="date" matchMode="is">
<ng-template pTemplate="filter" let-filter="filterCallback">
<p-calendar (onSelect)="filter($event)" dateFormat="dd/mm/yy"></p-calendar>
</ng-template>
</p-columnFilter>
</th>
<th>
<p-columnFilter type="text" field="name"></p-columnFilter>
</th>
</tr>
</ng-template>
</p-table>
解释:
我正在自定义字段过滤器的设计,以实现此目的:
在“p-columnFilter”中,我添加 (ng-content) 并将 pTemplate 指令设置为“filter”。
我还得到别名为“filter”的“filterCallback”函数
示例代码:
<p-columnFilter type="date" field="date" matchMode="is">
<ng-template pTemplate="filter" let-anyname="filterCallback">
//Custom Design (Example p-calendar, or any other)
Data:
<input type="text" (change)="anyname($event.value)"></input>
</ng-template>
</p-columnFilter>
“anyname”函数是“filterCallback”函数的别名,调用时将应用p-columnFilter组件的过滤器。
我做的是:自定义Design,调用p-columnfFilter组件的filter(filterCallback)取一定值
如果还有什么问题,欢迎评论,我会尽力帮助的;
重要提示:您可以使用名为的 PrimeNG 组件仅格式化日期显示:,使用 dateFormat 输入
示例:
<p-calendar dateFormat="dd.mm.yy"></p-calendar>
<p-columnFilter [field]="filter_field">
<ng-template pTemplate="filter" let-value let-filter="filterCallback">
<p-calendar #fd [ngModel]="value" dataType="date" dateFormat="dd/mm/yyyy" [showIcon]="false" [showOnFocus]="false(onBlur)="filter(fd.value)"></p-calendar>
</ng-template>
</p-columnFilter>
它似乎对我有用
如果您想为每个 p-calendar 设置特定格式,请在您的 main.ts 中添加:
import { Calendar } from 'primeng/calendar';
Calendar.prototype.getDateFormat = () => 'dd/mm/yy';
这只是一个丑陋的 hack,因为像这样的东西应该可以在某个地方配置。
到目前为止,我还没有发布答案,所以这是我设法让它发挥作用的答案。我使用了 pTemplate 并在模板中使用了 p-calendar 组件来更改日期格式。
<p-columnFilter [type]="col.type" [field]="col.field" display="menu" [showMatchModes]="true" [showOperator]="false" [showAddButton]="false">
<ng-template pTemplate="filter" let-value let-filter="filterCallback">
<p-calendar #calendar [ngModel]="value" (onSelect)="filter(calendar.value)" (onInput)="setup(calendar.value, col.field)" dateFormat="dd.mm.yy"></p-calendar>
</ng-template>
</p-columnFilter>
在打字稿中,我在 table 上使用 ViewChild 设置了一个过滤器值,如下所示:
@ViewChild("dt") dataTableComponent: Table;
setup(value, id){
if(value != null)
this.dataTableComponent.filters[id][0].value = value;
}
您可以通过配置 PrimeNgConfig 来做到这一点:
在您的 i18n 资产中(也可以只是一个打字稿常量):
"primeng": {
...
"dateFormat": "dd.mm.yy",
...
}
然后在您的应用程序组件构造函数中注入 PrimeNgConfig
:
private primeNgConfig: PrimeNGConfig
在ngOnInit中你可以设置配置:
this.translate.get('primeng').subscribe(res => this.primeNgConfig.setTranslation(res))
按日期过滤时如何以及是否可以更改日期格式?
<p-columnFilter type="date" [field]="col.field" display="menu">
默认格式是mm/dd/yyyy但是我想实现dd/mm/yyyy
如果你使用的是“p-columnFilter”组件,这意味着你在p-table里面,你想根据filter
过滤值你可以用这个:
<p-table dataKey="id">
<ng-template pTemplate="header">
<tr>
<th>Data</th>
<th>Name</th>
</tr>
<tr>
<th>
<p-columnFilter type="date" field="date" matchMode="is">
<ng-template pTemplate="filter" let-filter="filterCallback">
<p-calendar (onSelect)="filter($event)" dateFormat="dd/mm/yy"></p-calendar>
</ng-template>
</p-columnFilter>
</th>
<th>
<p-columnFilter type="text" field="name"></p-columnFilter>
</th>
</tr>
</ng-template>
</p-table>
解释:
我正在自定义字段过滤器的设计,以实现此目的:
在“p-columnFilter”中,我添加 (ng-content) 并将 pTemplate 指令设置为“filter”。
我还得到别名为“filter”的“filterCallback”函数
示例代码:
<p-columnFilter type="date" field="date" matchMode="is">
<ng-template pTemplate="filter" let-anyname="filterCallback">
//Custom Design (Example p-calendar, or any other)
Data:
<input type="text" (change)="anyname($event.value)"></input>
</ng-template>
</p-columnFilter>
“anyname”函数是“filterCallback”函数的别名,调用时将应用p-columnFilter组件的过滤器。
我做的是:自定义Design,调用p-columnfFilter组件的filter(filterCallback)取一定值
如果还有什么问题,欢迎评论,我会尽力帮助的;
重要提示:您可以使用名为的 PrimeNG 组件仅格式化日期显示:,使用 dateFormat 输入
示例:
<p-calendar dateFormat="dd.mm.yy"></p-calendar>
<p-columnFilter [field]="filter_field">
<ng-template pTemplate="filter" let-value let-filter="filterCallback">
<p-calendar #fd [ngModel]="value" dataType="date" dateFormat="dd/mm/yyyy" [showIcon]="false" [showOnFocus]="false(onBlur)="filter(fd.value)"></p-calendar>
</ng-template>
</p-columnFilter>
它似乎对我有用
如果您想为每个 p-calendar 设置特定格式,请在您的 main.ts 中添加:
import { Calendar } from 'primeng/calendar';
Calendar.prototype.getDateFormat = () => 'dd/mm/yy';
这只是一个丑陋的 hack,因为像这样的东西应该可以在某个地方配置。
到目前为止,我还没有发布答案,所以这是我设法让它发挥作用的答案。我使用了 pTemplate 并在模板中使用了 p-calendar 组件来更改日期格式。
<p-columnFilter [type]="col.type" [field]="col.field" display="menu" [showMatchModes]="true" [showOperator]="false" [showAddButton]="false">
<ng-template pTemplate="filter" let-value let-filter="filterCallback">
<p-calendar #calendar [ngModel]="value" (onSelect)="filter(calendar.value)" (onInput)="setup(calendar.value, col.field)" dateFormat="dd.mm.yy"></p-calendar>
</ng-template>
</p-columnFilter>
在打字稿中,我在 table 上使用 ViewChild 设置了一个过滤器值,如下所示:
@ViewChild("dt") dataTableComponent: Table;
setup(value, id){
if(value != null)
this.dataTableComponent.filters[id][0].value = value;
}
您可以通过配置 PrimeNgConfig 来做到这一点:
在您的 i18n 资产中(也可以只是一个打字稿常量):
"primeng": {
...
"dateFormat": "dd.mm.yy",
...
}
然后在您的应用程序组件构造函数中注入 PrimeNgConfig
:
private primeNgConfig: PrimeNGConfig
在ngOnInit中你可以设置配置:
this.translate.get('primeng').subscribe(res => this.primeNgConfig.setTranslation(res))