如果el-table-column(表格中的一列)开启了sortable,表格头部会出现上下箭头图标。单击该图标会触发排序事件。我们暂时称它为el-table的原生排序。(观察这个排序,不影响el-table绑定的tableData(using:data),影响的是ElTableBody中的数据,排序后tableData的dataArray和ElTableBody的dataArray内部元素顺序不一致两个数组的)el-table本机排序是愚蠢的。是一个普通的数组排序,sort比较字符串和undefined比较会产生和我们预期不一致的结果。官方也考虑到了这一点,所以允许我们使用el-table上的sort-change事件来自定义比较功能。如果el-table开启了sort-change,那么sort-change指定的compareFunction将替代el-table原生的排序。(再观察这次排序,影响了el-table(:data)绑定的tableData,也影响了ElTableBody中的数据,排序后tableData的dataArray和ElTableBody的dataArray会改变元素顺序,保持不变。)(上面说的Observe,方法是用chrome插件vueTools查看绑定值,没有这个插件,只能用vuewatch深度监控tableData,观察变化,也能说明问题)如果el-table-column开启了sortable,那么el-table原生排序和sort-change必然会触发一个。(必然会触发,肯定会二选一)需要强调的是,一定要选二选一。对el-table进行二次封装时,这里我们将封装后的组件称为CustomizedTable。当使用CustomizedTable并在某列启用sortable时,是CustomizedTable级别的自定义排序事件。传入组件的tableData排序完成后,再在组件内部传递。此时并没有触发sort-change事件,所以当你最后点击上下箭头图标进行排序时,已经在组件层面排序过的数据会通过el-table的原生排序再次排序,这相当于对已经排序的数据进行排序。又安排了,排序这么傻的排序,结果很emm。建议二次封装el-table时,定义一个switch是否开启sort-change,在CustomizedTable组件内部写compareFunction,在组件内部进行自定义排序,避免排序。移植自我自己的dirackehttps://www.yuque.com/diracke...
