antd+vue——table组件字段排序——对象数组排序 中文排序——基础积累
最近在用vue+antd
做后台管理系统时,遇到一个需求就是要实现table
表格某个字段的排序
效果图如下:
在antd
官网上,有关于排序的示例:
示例中给出的两个字段的排序
监听change事件,可以获取到当前排序的字段名
由于我这边的需求是按照文字排序,也就是中文文字排序,因此上面的代码不太适合
下面介绍我的写法:
1.给想要排序的字段添加sorter
属性,这样才能在表格中有上下箭头的效果
...
{
title: '订单包',
dataIndex: 'groupNo',
sorter: (a, b) => a.groupNo - b.groupNo,
width: 100,
},
{
title: '订单号',
dataIndex: 'orderNo',
sorter: (a, b) => a.orderNo - b.orderNo,
width: 110,
},
...
2.给table组件绑定change事件
<a-table
:rowKey="(r, i) => r.Id"
:columns="columns"
:data-source="tableList"
:pagination="pagination"
bordered
:scroll="{ x: 1000, y: 460 }"
@change="changeTable"
>
...
</a-table>
3.监听change
事件
changeTable(pagination, filters, sorter) {
console.log(sorter);
if (sorter && sorter.columnKey) {
let list = this.tableList.sort(
this.sortBy(
sorter.columnKey,
sorter && sorter.order == 'ascend' ? true : false
)
); //sortBy是根据value字段对对象数组进行排序
console.log(this.tableList);
this.tableList = list;
} else {
const pager = { ...this.pagination };
pager.current = pagination.current;
this.pagination = pager;
this.getList();
}
},
先判断是否有sorter
,如果有这个属性,则表示可以进行字段的排序,如果没有,则表示是切换了页码或者其他操作,是需要调接口的。
因为我这边的需求是:仅针对当前页面的数据进行排序,不需要调用接口排序。
此时需要用到汉字的排序:
sortBy(field, flag) {
return function(a, b) {
if (flag) {
return b[field].localeCompare(a[field]);
} else {
return a[field].localeCompare(b[field]);
}
};
},
完成!!!多多积累,多多收获!