element-ui表格分页以后,日期排序乱了,只是对当前页面排序,没有对整个数据排序

如题,表格没有分页前是按照日期顺序排序的,分页以后日期排序乱了,如下图
这是第一页
图片描述

这是第二页
图片描述

很显然,日期顺序乱了,只是在当前页面排序了,没有进行整个排序。
我的代码如下

<template>
  <div>
    ...
          <div>
            <el-table
              :data="tableData.slice((currentPage-1)*pagesize,currentPage*pagesize)"
              border
              style="width: 100%"
              :default-sort = "{prop: 'date', order: 'descending'}">
              <el-table-column
                prop="date"
                label="Modified Date"
                width="180">
              </el-table-column>
              <el-table-column
                prop="name"
                label="Experiment Name"
                width="180">
              </el-table-column>
              <el-table-column
                prop="content"
                label="Content"
                width="640">
              </el-table-column>
            </el-table>
            <br><br>
            <div class="block">
              <el-pagination
                @size-change="handleSizeChange"
                @current-change="handleCurrentChange"
                :current-page="currentPage"
                :page-sizes="[10, 20, 30, 40]"
                :page-size="pagesize"
                layout="total, sizes, prev, pager, next, jumper"
                :total="tableData.length">
              </el-pagination>
            </div>
            </div>
...
</template>

<script>
...
    export default{
      data() {
        return {
          tableData:[{
            date: '',
            name: '',
            content: ''
          }],
          currentPage: 1,
          pagesize:10
        }
      },
      mounted: function(){
        this.getAbHistory();
      },
      methods:{
        handleSizeChange(size) {
          this.pagesize = size;
        },
        handleCurrentChange(currentPage) {
          this.currentPage = currentPage;
        },
        getAbHistory(){
          axios.get("/historyScan/AbHistory").then(result =>{
            var res = result.data;
            if(res.status == "0"){
              let values = res.result.hbaseRst;
              var data = []
              for (let i = 0; i < values.length; i++){
                var obj = {}
                obj.name= values[i].key;
                obj.date = moment(values[i].timestamp).format("YYYY-MM-DD HH:mm:ss");
                obj.content = values[i].$;
                data[i] = obj
              }
              this.tableData = data;;
            }
            else{
              this.$message.error('错误,无法获取A/B test 历史记录');
            }
          });
        }

      }

    }
</script>

请大神指教一下,如何对整个数据进行排序,前端代码应该如何修改,谢谢

阅读 16.7k
5 个回答

element table 排序有一个远程排序
sortable 对应列是否可以排序,如果设置为 'custom',则代表用户希望远程排序,需要监听 Table 的 sort-change 事件
然后在后端进行全量数据排序,返回过来的值页面会进行再次排序

整体数据的排序还是交给后端吧,前端传参就可以了。
前端要搞这个的话,需要你把所有数据传过来才行,不然只能对已经有的数据排序(不建议这么做)。
具体怎么做已经有朋友回答了,我就不赘述了。

通过向el-table增加@sort-change事件,向el-table-column增加sortable='custom'属性,向methods实现sortChange方法,可以实现数据在前台分页后的全部数据排序(不止本页排序)。

<el-table            
:data="tableData.slice((pageIndex-)*pageSize,pageIndex*pageSize)"
@sort-change="sortChange">
......

<el-table-column prop="reserve" label="库存量" sortable='custom'></el-table-column>
......

sortChange(column) {
  this.pageIndex = 1; // 排序后返回第一页
  if (column.order === "descending") {
    this.tableData.sort((a, b) => b[column.prop] - a[column.prop]);
  } else if (column.order === "ascending") {
    this.tableData.sort((a, b) => a[column.prop] - b[column.prop]);
  }
}

整个数据按时间排序?那是要传个标识告诉后端,再把数据返回吧。element的排序一版都是针对当前页数据的

分页的排序要后端来做

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题