Vue+elementUI实现逻辑分页和物理分页

首先呢,分页分为两种方式,一种是逻辑分页,一种是物理分页。逻辑分页是指后端完成分页操作,而前端通过参数page(第几页)、rows(每页条数)去向数据库查询当前页的数据;物理分页是指前端从数据库把所有数据都取过来,然后在前端完成分页。所以两者相比较而言,物理分页占用的内存更高,但效率更快。当数据量不多时,物理分页可以满足功能要求,但当数据量很大时,则需要采用逻辑分页,然而我一开始使用的是物理分页,经过讨论分析,立马改为逻辑分页。逻辑分页和物理分页的主要区别就在于取数据这一块

首先是效果:

首先是elementUI部分,使用的是el-table,用来显示取到的数据

<el-table
      ref="multipleTable"
      :data="anchorRecordTable"
      tooltip-effect="dark"
      style="width: 100%"
      @selection-change="handleSelectionChange">
      <el-table-column
        type="index"
        width="50%"
        :index="indexMethod"
        align="center">
      </el-table-column>
      <el-table-column
        prop="anchorId"
        label="锚点ID"
        width="90%"
        align="center">
      </el-table-column>
      <el-table-column
        prop="anchorAlias"
        label="锚点别名"
        width="90%"
        align="center">
      </el-table-column>
      <el-table-column
        prop="onlineTime"
        label="上线时间"
        width="200%"
        align="center">
      </el-table-column>
      <el-table-column
        prop="offlineTime"
        label="下线时间"
        width="200%"
        align="center"
        show-overflow-tooltip>
      </el-table-column>
    </el-table>

接着就是要分页啦:

<templete>
<div class="pagination">
      <el-pagination @size-change="handleSizeChange"
                     @current-change="handleCurrentChange"
                     :current-page="anchorRecordcurrentPage"
                     :page-sizes="pageSizes"
                     :page-size="anchorRecordPageSize" layout="total, sizes, prev, pager, next, jumper"
                     :total="anchorRecordtotalCount">
      </el-pagination> 
</div>
</templete>

<script>
data: function () {
      return {
        anchorRecordTable: [],
        anchorRecordcurrentPage: 1, // 默认显示第几页
        anchorRecordtotalCount: 1, // 总条数,根据接口获取数据长度(注意:这里不能为空)
        pageSizes: [2, 5, 10, 20],  // 个数选择器(可修改)
        anchorRecordPageSize: 5, // 默认每页显示的条数(可修改)
      }
    },

methods:{

handleSelectionChange(val) {
        console.log(val);
        this.multipleSelection = val;
      },
 
//翻页序号递增
indexMethod(index) {
        return (this.anchorRecordcurrentPage-1) * this.anchorRecordPageSize + (index + 1)

      }
}
</script>

上面两块逻辑分页和物理分页是一样的。

然后就是取数据、放数据:

逻辑分页:

getanchorRecordTable(n1,n2) {
        let self=this;
        n1 = self.anchorRecordcurrentPage;
        n2 = self.anchorRecordPageSize;
        const anchorRecorddata=new FormData();
        anchorRecorddata.append('page',n1);
        anchorRecorddata.append('rows',n2);
        this.axios.post("url",anchorRecorddata ).then(  (reponse) => {
            self.anchorRecordTable = [];
            // 将数据赋值给tableData
            for (var i = 0; i < reponse.data.rows.length; i++) {
              self.anchorRecordTable.push(reponse.data.rows[i]);
            }
            // 将数据的长度赋值给totalCount
            self.anchorRecordtotalCount = reponse.data.total;
          }
        );
      },

// 每页显示的条数
handleSizeChange(val) {
        // 改变每页显示的条数
        this.anchorRecordPageSize = val;
        // 点击每页显示的条数时,显示第一页
        this.getanchorRecordTable(val, 1);
        // 注意:在改变每页显示的条数时,要将页码显示到第一页
        this.anchorRecordcurrentPage = 1
      },

// 显示第几页
handleCurrentChange(val) {
        // 改变默认的页数
        this.anchorRecordcurrentPage = val;
        // 切换页码时,要获取每页显示的条数
        this.getanchorRecordTable(this.anchorRecordPageSize, (val) * (this.pageSize))
      },

物理分页:

getanchorRecordTable(){
            let self=this;
            this.axios.post("url").then(  (reponse) => {
            self.anchorRecordTable = [];
            // 将数据赋值给tableData
            for (var i = 0; i < reponse.data.length; i++) {
              self.anchorRecordTable.push(reponse.data[i]);
            }
            // 将数据的长度赋值给totalCount
            self.anchorRecordtotalCount = reponse.data.length;
          }
        );
      },

// 每页显示的条数
handleSizeChange(val) {
        // 改变每页显示的条数
        this.anchorRecordPageSize = val;
        // 注意:在改变每页显示的条数时,要将页码显示到第一页
        this.anchorRecordcurrentPage = 1
      },

// 显示第几页
handleCurrentChange(val) {
        // 改变默认的页数
        this.anchorRecordcurrentPage = val;
      },
     
   }

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值