angular - 按日期过滤 TurboTable

标签 angular primeng primeng-turbotable

我有一个简单的 TurboTable,我在其中显示了一些数据,包括日期。

<p-table [value]="boxes" #dt>
    <ng-template pTemplate="header" let-columns>
        <tr>
            <th pSortableColumn="Number">
                Number
                <p-sortIcon field="Number"></p-sortIcon>
            </th>
            <th pSortableColumn="DateInserted">
                Interted at
                <p-sortIcon field="DateInserted"></p-sortIcon>
            </th>
        </tr>
        <tr>
            <th>
            <!-- Here is input to filter number -->
            </th>
            <th>
            <!-- Here I want to use Calendar component to select date range -->
            <p-calendar 
                [(ngModel)]="date"
                selectionMode="range"
                [readonlyInput]="true"
                dateFormat="dd.mm.yy"
                (onSelect)="onDateSelect($event)">
            </th>
        </tr>
    </ng-template>
    <ng-template pTemplate="body" let-box>
        <tr [pSelectableRow]="box">
            <td>{{box.Number}}</td>
            <td>{{box.DateInserted | date}}</td>
        </tr>
    </ng-template>
</p-table>

目前,Turbo Table 只提供了几种用于过滤器的匹配模式(“startsWith”、“contains”、“endsWith”、“equals”和“in”)。有没有按日期或日期范围过滤的选项?

我想使用 Calendar 组件来选择一个日期范围,然后按这些日期过滤数据。我正在使用 Date 对象(我在带有 DatePipe 的 Table 中显示)。
现在这些匹配模式都没有提供正确比较日期对象的选项。

解决方法是将日期存储为字符串,然后过滤工作。但这不是完美的解决方案,因为它会在将日期转换为字符串时产生问题,而且日期格式在任何地方都必须相同。那么也许有更好的选择来在 TurboTable 中实现按日期范围过滤?

最佳答案

组件.html

<p-calendar 
    [(ngModel)]="date"
    selectionMode="range"
    [readonlyInput]="true"
    dateFormat="dd.mm.yy"
    (onSelect)="dt.filter($event, 'DateInserted', 'myCustomFilter')">
组件.ts
PrimeNG 8.0.3 及更高版本

error TS2339: Property 'filterConstraints' does not exist on type 'Table'


filterConstraints 在提交 658507f 中被替换, 与 FilterUtils.
import { Table } from 'primeng/table';
//angular 8 import { FilterUtils } from "primeng/api";
//angular 9 import { FilterUtils } from "primeng/utils";
import { FilterUtils } from "primeng/api";
...
@Component({...})
export MyComponent implements OnInit {
    @ViewChild('dt') private _table: Table;
    ngOnInit(){
        FilterUtils['myCustomFilter'] = (value, filter): boolean => {
            return value.getTime() == filter.getTime();
        }
    }
}
PrimeNG 8.0.2 及更低版本
import { Table } from 'primeng/table';
...
@Component({...})
export MyComponent implements OnInit {
    @ViewChild('dt') private _table: Table;
    ngOnInit(){
        this._table.filterConstraints['myCustomFilter'] = (value, filter): boolean => {
            return value.getTime() == filter.getTime();
        }
    }
}

关于angular - 按日期过滤 TurboTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49551003/

相关文章:

angular - 在 Angular 6 中如何使不区分大小写的 url 模式?

angular - 发现很难将控制台上显示的数据显示在 View 中

angularjs - Angular 2 - Internet Explorer 版本 11 不显示我的应用程序。我需要做些什么才能显示出来吗?

javascript - 未指定 js 扩展时,Angular2 Typescript 应用程序在组件上抛出 404

angular - primeng 4 中的 "' p-checkbox ' is not a known element "

javascript - 隐藏在可滚动表格标题中的下拉值 - Primeng

javascript - Angular javascript Primeng growl不会将文本换行到下一行

angular - 我的全日历工具提示没有结果

angular - primeng turbotable 列自动调整大小与滚动

angular - 排序时 PrimeNG turbo 表模板错误