如果 el-table-column(表中的某一列)开启了sortable, 会在表头上呈现一个高低箭头图标。
这个点击图标会触发排序事件。咱们暂且把它称为el-table的原生排序。
(察看这个排序,它不影响el-table (用:data)绑定的 tableData,它影响的是ElTableBody外面的数据,排序后tableData的dataArray和ElTableBody的dataArray 二者数组外部元素程序不统一)
el-table原生排序是很笨的。就是一般的数组sort,sort对字符串比拟、有undefined的比拟会产生与咱们预期不统一的后果。官网也思考到了这一点,因而容许咱们在el-table上利用sort-change事件自定义比拟函数。
如果el-table 开启了sort-change那么sort-change指定的compareFunction会取代el-table的原生排序。
(再察看这个排序,它影响el-table (:data)绑定的 tableData,也会影响ElTableBody外面的数据,排序后tableData的dataArray和ElTableBody的dataArray 元素程序都会扭转,保持一致)
(下面所说的察看,办法是用chrome插件 vueTools,查看绑定值。没有这个插件,只用vue的watch,深度监听tableData,察看变动,也能阐明问题)
如果 el-table-column开启了sortable,那么el-table原生排序 和 sort-change
必然会触发一个。(必然会触发,且肯定会二选一)
要强调二者必触发其一。
对el-table进行二次封装的时候,这里咱们把封装好的组件称为CustomizedTable,在应用CustomizedTable且某一列开启了sortable,是在CustomizedTable层面自定义排序事件,对传入组件的tableData排序实现之后再传入组件外部。此时sort-change事件没有触发,那么最终点击高低箭头图标进行排序的时候,组件层面曾经实现排序的数据会被el-table的原生排序再排序一次,相当于曾经排好序的数据,被sort再排了一次,sort这么笨的排序,后果就很emm了。
倡议对el-table进行二次封装的时候,给一个开关定义sort-change是否开启,把compareFunction写在CustomizedTable组件外部,自定义排序在组件外部进行,防止sort。
搬运自本人的语雀
https://www.yuque.com/diracke...