@sort-change事件:监听排序事件,修改排序字段 sortField
header-cell-class-name属性:
官方:表头单元格的 className 的回调方法,也可以使用字符串为所有表头单元格设置一个固定的 className。
我的理解:排序事件将修改表头类(如添加 ascending 类名),这时将触发每一列调用header-cell-class-name回调,修正该列的属性,其中 column.order 决定表头排序样式清除排序:官方clearSort() 不适用,因此通过遍历 sortField 的排序字段,并通过sort事件手动触发排序值为 null 的排序,从而实现清除对所有字段的排序
<el-table :data="tableData" border @sort-change="handleSortChange" :header-cell-class-name="handleHeadAddClass" > </el-table>const sortField = {}; const handleSortChange = ({ order, prop }) => { // 触发的排序和缓存的排序相同时,取消该字段的排序 if (!order || sortField[prop] === order) { // 排序字段按触发顺序确定排列优先级,需要删除字段确保下次触发时位于最后优先级 delete sortField[prop]; } else { sortField[prop] = order; } // 排序参数格式转换 const orderList = []; Object.keys(sortField).forEach((k) => { if (sortField[k] !== null) { orderList.push({ orderField: k, orderType: sortField[k] === 'ascending' ? 'asc' : 'desc' }); } }); if (!clearSortFlag) { emit('query', 'sortQuery', orderList); } }; const handleHeadAddClass = ({ column }) => { if (sortField[column.property]) { column.order = sortField[column.property]; } }; // 清除排序 let clearSortFlag = false; const clearTableSort = () => { clearSortFlag = true; Object.keys(sortField).forEach((prop) => { tableRef.value.sort(prop, null); }); clearSortFlag = false; };
参考:https://blog.csdn.net/weixin_40984344/article/details/109653987
版权声明:本文为weixin_40621204原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。