Vue中使用andt组件a-table列表数据根据点击的表头进行升/降排序-案例

Posted JackieDYH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue中使用andt组件a-table列表数据根据点击的表头进行升/降排序-案例相关的知识,希望对你有一定的参考价值。

官方示例-API链接

数据根据当前点击的内容进行升降排序 

使用步骤

数据量过少,可以使用前端排序方式

//官方案例
<template>
  <a-table :columns="columns" :data-source="data" @change="onChange" />
</template>
<script>
const columns = [
  
    title: 'Name',
    dataIndex: 'name',
    filters: [
      
        text: 'Joe',
        value: 'Joe',
      ,
      
        text: 'Jim',
        value: 'Jim',
      ,
      
        text: 'Submenu',
        value: 'Submenu',
        children: [
          
            text: 'Green',
            value: 'Green',
          ,
          
            text: 'Black',
            value: 'Black',
          ,
        ],
      ,
    ],
    // specify the condition of filtering result
    // here is that finding the name started with `value`
    onFilter: (value, record) => record.name.indexOf(value) === 0,
    sorter: (a, b) => a.name.length - b.name.length,
    sortDirections: ['descend'],
  ,
  
    title: 'Age',
    dataIndex: 'age',
    defaultSortOrder: 'descend',
    sorter: (a, b) => a.age - b.age,
  ,
  
    title: 'Address',
    dataIndex: 'address',
    filters: [
      
        text: 'London',
        value: 'London',
      ,
      
        text: 'New York',
        value: 'New York',
      ,
    ],
    filterMultiple: false,
    onFilter: (value, record) => record.address.indexOf(value) === 0,
    sorter: (a, b) => a.address.length - b.address.length,
    sortDirections: ['descend', 'ascend'],
  ,
];

const data = [
  
    key: '1',
    name: 'John Brown',
    age: 32,
    address: 'New York No. 1 Lake Park',
  ,
  
    key: '2',
    name: 'Jim Green',
    age: 42,
    address: 'London No. 1 Lake Park',
  ,
  
    key: '3',
    name: 'Joe Black',
    age: 32,
    address: 'Sidney No. 1 Lake Park',
  ,
  
    key: '4',
    name: 'Jim Red',
    age: 32,
    address: 'London No. 2 Lake Park',
  ,
];

function onChange(pagination, filters, sorter) 
  console.log('params', pagination, filters, sorter);


export default 
  data() 
    return 
      data,
      columns,
    ;
  ,
  methods: 
    onChange,
  ,
;
</script>
--------------------------------------------------------------------------------
// 表格列的配置描述 - 简版
const columns = [
	...
	
		title: '实验名称',
		key: 'abName',
		slots:  customRender: 'abName' ,
		width: '16%',
		sorter: (a, b) => 
				let prev = a.abName ? a.abName : '';
				let next = b.abName ? b.abName : '';
				return prev.localeCompare(next, 'zh-Hans-CN',  sensitivity: 'accent' );
		,
	
	...
]

如果数据过多建议后端进行排序,前端会有分页,且不会一次拿完所有数据,可以使用后端排序

将需要排序的列设置属性 sorter: true

// 表格列的配置描述
const columns = [
	...
	
		title: '实验名称',
		key: 'abName',
		slots:  customRender: 'abName' ,
		width: '16%',
		sorter: true
	
	...
]

点击表头文字右边的上下箭头时会触发table的change事件

<a-table
	v-show="abProductManagerListQueryCode"
	bordered
	v-bind="tableProps"
	:columns="columns"
	:row-key="(record) => record.abNameId"
	@change="pageChange"
	:pagination="
		defaultPageSize: 10,
		showSizeChanger: true,
		showQuickJumper: true,
		total: tableProps.totalData,
		showTotal: (total, range) => `共 $total 条`,
		pageSizeOptions: ['10', '20', '30', '40', '50'],
	"
>
...
</a-table>

// change事件绑定的函数
function pageChange(page, filters, sorter) 
	console.log(page);
	console.log(filters);
	console.log(sorter);

 第一次点击名称右边箭头时触发事件,朝上箭头高亮,为升序

 第二次点击名称右边箭头时触发事件,朝下箭头高亮,为降序

 第三次点击名称右边箭头时触发事件,朝上朝下箭头都不高亮,为既不升序,也不降序

  

参数说明 

1.每次点击时都能拿到当前的点击对象(比如列子中Age),可以通过sorter参数里面的columnKey拿到。

2.每次点击时可以区分是升序、降序、还是既不升序也不降序,
sorter参数中order值为"ascend"时为升序;
sorter参数中order值为"descend"时为降序;
sorter参数中没有order键时为既不升序也不降序。

所以我们就可以在change绑定的事件中,根据排序的类型(点击的哪一列)、升序还是降序来向服务器发送请求拿到数据。

所以在确认当前点击的是哪一列时应该取sorter参数中的columnKey字段。

以上是关于Vue中使用andt组件a-table列表数据根据点击的表头进行升/降排序-案例的主要内容,如果未能解决你的问题,请参考以下文章

antd vue里面 a-table再次封装,slot-scope如何跨组件传递?

vue antd a-table配置表格单选多选

Ant-Design-Vue中关于Table组件的使用(初级)

Ant-Design-vue的a-table入门

ant-design-vue a-table的分页

基于Ant Design Vue创建的vue项目中表格组件的使用