【问题标题】:Date filter with template not applying filtering (PrimeNG Table)带有模板的日期过滤器不应用过滤(PrimeNG 表)
【发布时间】:2021-07-07 08:02:41
【问题描述】:

我正在开发一个带有 PrimeNG 表的 SPA 来显示记录,每列都有一个数据过滤器。

其中一个是日期记录,它以 ISO 字符串的形式出现,并在被馈送到表本身之前转换为 Date 对象。

我需要日期格式为“dd/MM/yyyy”,默认情况下,日期的 p-columnFilter 与“MM/dd/yyyy”一起使用,所以我使用过滤器的 pTemplate 来自定义格式在日历中。

<ng-template ngFor let-col [ngForOf]="columns">
  <th *ngIf="col.type !== 'date'" [pSortableColumn]="col.field">
    {{col.header}}
    <p-sortIcon [field]="col.field"></p-sortIcon>
  </th>
  <th *ngIf="col.type === 'date'" class="obe-table__date-header" [pSortableColumn]="col.field" [attr.rowspan]="2">
    {{col.header}}
    <p-sortIcon [field]="col.field"></p-sortIcon>
    <p-columnFilter type="date" [field]="col.field" display="menu">
      <ng-template pTemplate="filter">
        <p-calendar dateFormat="dd/mm/yy"></p-calendar>
      </ng-template>
    </p-columnFilter>
  </th>
</ng-template>

然后,当显示过滤器 UI 并单击“应用”时,它就像没有注册值一样。我在想我在日历中缺少一个 [ngModel] 绑定,但我也尝试过,但没有成功。

提前谢谢你。

【问题讨论】:

    标签: angular primeng primeng-turbotable primeng-calendar


    【解决方案1】:

    您对函数的调用丢失:

     (onSelect)="filter($event)"
    

    不要忘记在 ng-template 中:

     let-filter="filterCallback"
    

    它给出了这个:

     <p-columnFilter type="date" [field]="col.field" display="menu">
      <ng-template pTemplate="filter" let-filter="filterCallback">
        <p-calendar dateFormat="dd/mm/yy" (onSelect)="filter($event)"></p- 
         calendar>
      </ng-template>
     </p-columnFilter>
    

    【讨论】:

    • 感谢您的回答!我终于切换到一种解决方法,将过滤器显示为行而不是菜单视图,并使用自定义逻辑来控制清除和选择功能。但这绝对是我第一次尝试时缺少的 :) 将其标记为已接受。
    猜你喜欢
    • 2017-05-26
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多