ngx-datatable,触发列排序
ngx-datatable, trigger column sort
我在尝试手动触发对 ngx-datatable 中的行进行排序时遇到了一些问题。
场景是在小型设备上我将一些列从 header 移动到 ngx-datatable-row-detail,但是当我尝试调用 customSort 函数时,ngx-datatable 没有按照我的预期进行排序。
模板如下所示:
<ngx-datatable #myTable [columnMode]="'flex'"
[rows]="_appointments"
[rowHeight]="'auto'"
[sorts]="listProps.currentSort"
(sort)="sorted($event)"
[columns]="_tableColumns">
<ngx-datatable-row-detail [rowHeight]="'auto'" #myDetailRow>
<ng-template let-row="row" let-expanded="expanded" ngx-datatable-row-detail-template>
<div class="ngx-table-toogle hidden-md">
<div [class.visible-xs]="myCol.collapse_xs" [class.visible-sm]="myCol.collapse_sm" *ngFor="let myCol of _collapsedTableColumns">
<div class="col-xs-12 col-sm-4" [class.sortable]="myCol.sortable" (click)="onCustomSort(myCol.prop,myCol.sortable)">
<div class="detail-row-header">
{{myCol.name}}
<span [class.sort-btn]="myCol.sortable" [class.sort-desc]="isSortedBy(myCol.prop,'desc')" [class.sort-asc]="isSortedBy(myCol.prop,'asc')"></span>
</div>
</div>
<div class="col-xs-12 col-sm-8">
<span class="detail-row-data">{{getVal(row,myCol.prop)}}</span>
</div>
</div>
</div>
</ng-template>
</ngx-datatable-row-detail>
onCustomSort 方法如下:
onCustomSort(sortCol: string, sortable:boolean) {
if (!sortable)
return;
let curdir = this.listProps.currentSort[0].dir === SortDirection.desc ? SortDirection.asc : SortDirection.desc;
// Hmm, doesn't trigger a resorting of the table.
this.listProps.currentSort = [{ prop: sortCol, dir: curdir }];
this.table.sorts = this.listProps.currentSort;
}
我希望修改 this.listProps.currentSort
会触发 table 的手段,因为它绑定到 [sorts]="listProps.currentSort"
但没有任何反应。
有什么想法吗?
实际上解决方案非常简单,只需添加
this.table.onColumnSort({ sorts: this.listProps.currentSort });
添加到 onCustomSort 方法,现在看起来像这样:
onCustomSort(sortCol: string, sortable:boolean) {
if (!sortable)
return;
let curdir = this.listProps.currentSort[0].dir === SortDirection.desc ? SortDirection.asc : SortDirection.desc;
this.listProps.currentSort = [{ prop: sortCol, dir: curdir }];
this.table.onColumnSort({ sorts: this.listProps.currentSort });
}
我在尝试手动触发对 ngx-datatable 中的行进行排序时遇到了一些问题。 场景是在小型设备上我将一些列从 header 移动到 ngx-datatable-row-detail,但是当我尝试调用 customSort 函数时,ngx-datatable 没有按照我的预期进行排序。
模板如下所示:
<ngx-datatable #myTable [columnMode]="'flex'"
[rows]="_appointments"
[rowHeight]="'auto'"
[sorts]="listProps.currentSort"
(sort)="sorted($event)"
[columns]="_tableColumns">
<ngx-datatable-row-detail [rowHeight]="'auto'" #myDetailRow>
<ng-template let-row="row" let-expanded="expanded" ngx-datatable-row-detail-template>
<div class="ngx-table-toogle hidden-md">
<div [class.visible-xs]="myCol.collapse_xs" [class.visible-sm]="myCol.collapse_sm" *ngFor="let myCol of _collapsedTableColumns">
<div class="col-xs-12 col-sm-4" [class.sortable]="myCol.sortable" (click)="onCustomSort(myCol.prop,myCol.sortable)">
<div class="detail-row-header">
{{myCol.name}}
<span [class.sort-btn]="myCol.sortable" [class.sort-desc]="isSortedBy(myCol.prop,'desc')" [class.sort-asc]="isSortedBy(myCol.prop,'asc')"></span>
</div>
</div>
<div class="col-xs-12 col-sm-8">
<span class="detail-row-data">{{getVal(row,myCol.prop)}}</span>
</div>
</div>
</div>
</ng-template>
</ngx-datatable-row-detail>
onCustomSort 方法如下:
onCustomSort(sortCol: string, sortable:boolean) {
if (!sortable)
return;
let curdir = this.listProps.currentSort[0].dir === SortDirection.desc ? SortDirection.asc : SortDirection.desc;
// Hmm, doesn't trigger a resorting of the table.
this.listProps.currentSort = [{ prop: sortCol, dir: curdir }];
this.table.sorts = this.listProps.currentSort;
}
我希望修改 this.listProps.currentSort
会触发 table 的手段,因为它绑定到 [sorts]="listProps.currentSort"
但没有任何反应。
有什么想法吗?
实际上解决方案非常简单,只需添加
this.table.onColumnSort({ sorts: this.listProps.currentSort });
添加到 onCustomSort 方法,现在看起来像这样:
onCustomSort(sortCol: string, sortable:boolean) {
if (!sortable)
return;
let curdir = this.listProps.currentSort[0].dir === SortDirection.desc ? SortDirection.asc : SortDirection.desc;
this.listProps.currentSort = [{ prop: sortCol, dir: curdir }];
this.table.onColumnSort({ sorts: this.listProps.currentSort });
}