ant-design-vue中的table组件有一个排序属性,有升序、降序和不排序三种状态。在项目开发中,有时候产品经理会要求排序只能是升序或者降序,但是表格组件中并没有相应的API配置,那么如何取消不排序状态呢?1.排序相关API表格组件中排序相关的API有4个:sorter、sortOrder、sortDirections和changeevent。sorter:排序函数,一个函数用于本地排序,服务端排序需要设置为true。sortOrder:排序的控制属性,可以被外界用来控制列的排序,可以设置为'ascend','descend','false'。sortDirections:sortDirections:['ascend'|'descend']更改每列的可用排序方法。切换排序时,根据数组内容依次切换。当它设置在tableprops上时,它将对所有列生效。使用defaultSortOrder属性设置列的默认排序顺序。change:分页、排序、过滤发生变化时触发。这三个API都需要在Column中设置。Column是列描述数据对象,是列中的一项。列使用相同的API。例如:columns:Array=[{title:'平均处理时间/ms',dataIndex:'avgRt',width:'10%',sorter:true,sortOrder:false,sortDirections:['descend','ascend'],scopedSlots:{customRender:'avgRt'}},{title:'最大处理时间/ms',dataIndex:'maxRt',width:'10%',sorter:true,sortOrder:false,sortDirections:['descend','ascend'],scopedSlots:{customRender:'maxRt'}}]上面的代码显示了有排序功能的表中有两列数据,排序功能由服务端提供,排序方式是降序和升序依次切换。除了以上三个属性,我们还需要在排序的时候触发chang事件。record.id":dataSource="dataList"@change="sorterChange">sorterChange(pagination,filters,sorter)有3回调参数,其中sorter参数与排序相关,是一个对象,包括field和order属性,field描述当前排的列,order描述当前的排序顺序。当处于未排序状态时,排序器对象为空。因此,我们可以通过判断当前sorter对象是否为空来判断当前状态是否未排序,重新赋值渲染,从而达到“消除”状态的目的。2.具体实现根据以上设置,将当前排序状态切换为:降序->升序->空->降序->升序->空...,顺序调整为:降序->升序->descending->Ascending...,首先,我们需要定义一个对象sortObj对象来存放sorter对象的值。当sorter.order==='descend'时,将此时的sorter赋值给sortObj。当判断当前sorter.order为空,即状态未排序时,将上一步存储降序状态的sortObj赋值给sorter。并重新渲染列的排序样式,则可以将未排序状态更改为降序状态。sorterChange(pagination,filters,sorter){letsortObj={};if(sorter.order==='descend'){sortObj=sorter;}if(!sorter.order){sorter=sortObj;}switch(sorter.field){case'avgRt':this.sortTrans(sorter,0);休息;case'maxRt':this.sortTrans(sorter,1);休息;}}渲染函数为sortTrans,接收两个参数:sorter和index,index为当前列数据在columns数组中的位置。通过重新渲染当前列,并设置其他排序列的sortOrder为false,每次切换排序时只有当前列处于排序状态。sortTrans(sorter,index){for(leti=0;i<2;i++){this.columns[i].sortOrder=false;}this.columns[index].sortOrder=sorter.order;}3.总结上面的思路可以归纳为两步:1.将值为空对象的排序器重新赋值给目标排序状态的排序器,需要先存储目标状态的排序器;2.重新赋值后,重新渲染目标排序列样式的sorter。