如何从MatSort获取所有可排序的列

时间:2018-10-05 09:25:13

标签: angular angular-material angular-material2

我有数据表,我想从后端应用排序过程,因此最终用户可以在多个列上应用排序,我要做的是获取所有columns及其排序值每个asc/desc事件中的sortChange

让我们说这些列是:  name, gender, date_of_birth. 结果应该是:

[
{'name', 'asc'},
{'gender', 'desc'},
{'date_of_birth', 'desc'},
]

ts代码:

ngOnInit() {
 this.getData([])
 this.sort.sortChange.subscribe(
            () => {
            // access all the sortable columns
            let sortable_columns = -------------- // what should I write here?
            // call the http service
            this.getData(sortable_columns)
            });
}

现在我认为一般的算法很好,但是我找不到正确的语法来访问可排序的列,有关如何执行此操作的任何想法? 谢谢。

1 个答案:

答案 0 :(得分:0)

我通过在每个SortCahnge之后将活动列(最近排序的MatSortable列)存储在单独的结构中来解决此问题。

HTML脚本:

<mat-table matSort #table [dataSource]="dataSource" (matSortChange)="sortData($event)">
</mat-table>

ts代码:

    ngOnInit() {
            this.filterationArray['sort'] = [];
    }
    sortData(sort: Sort) {
        let index = this.filterationArray['sort'].findIndex(
            (elem) => {
                return elem[0] == sort.active;
            }
            );

        if (index == -1)
            this.filterationArray['sort'].push([sort.active, sort.direction]);
        else
            this.filterationArray['sort'][index][1] = sort.direction;

        console.log(this.filterationArray);
        // call the get service
        this.getDataFromBackEnd(this.filterationArray);
    }