← 返回首页
ElementUI之Pagination最佳实践方案
发表时间:2022-08-11 00:03:20
ElementUI之Pagination最佳实践方案

ElementUI 提供了 el-pagination 组件,只要配置相应得参数和事件,即可实现分页。

1.前端实现分页

适合后端接口返回的总记录数不太多的场景(通常在1000条以内)。

<template>
...
<!--引入elementui的分页组件,前端实现的分页-->
 <el-pagination
       background
       :current-page.sync="currentPage"
       layout="prev, pager, next"
       :page-size="pageSize"
       :pager-count="15" 
       @size-change="handleSizeChange"
       @current-change="handleCurrentChange"
       :total="courseList.length">
 </el-pagination>
</template>

<script>
   export default {
      name: "MyCourseListLefter",

     data(){
         return{
            pageSize: 10,   //每页的记录数
            currentPage: 1, //当前的页号,
            courseList:[]   //总记录数据集合
         }
     }, 
     //把当前分页数据当成一个计算属性
      computed:{
            coursePager: function () {
                return this.courseList.slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize);
            }
      }, 
      methods:{
          // 初始页currentPage、初始每页数据数pagesize和数据data
          handleSizeChange: function (size) {
              this.pageSize = size;
          },
          handleCurrentChange: function (currentPage) {
              this.currentPage = currentPage;
          },
          ...
     }  
}   
</script>

其中 ,:pager-count="15" 表示分页最多显示15个分页按钮。 ==注意:一定要添加 :current-page.sync="currentPage" 属性,可以解决页号不同步的问题。==

2.后端接口实现分页

如果总记录条数比较多,适合采用调用后端接口,每次返回该分页的数据,ElementUI分页组件仅仅负责渲染该分页数据。

<template>
...
    <!--引入elementui的分页组件,后端实现的分页,前端负责渲染-->
   <el-pagination
          background
          layout="prev, pager, next"
          :total="pager.total"
          :page-size="pager.size"
          @current-change="handleCurrentChange"
          :pager-count="15"
      >
  </el-pagination>
</template>

<script>
   export default {
      name: "MyCourseListLefter",

     data(){
         return{
            //分页对象
            pager: {
              //表示当前的分页数据
              records: [],
              total: 150, //总记录数
              size: 10, //每一页的记录数
              current: 1, //当前的分页号
              orders: [],
              optimizeCountSql: true,
              searchCount: true,
              countId: null,
              maxLimit: null,
              pages: 15 //总页数
           }
         }
     }, 

   methods:{
      handleCurrentChange: function (currentPage) {
        let pager = {
           catalogName: this.$store.state.currentCatalogNameData,
           currentPage: currentPage
        }
       //这里去调用后端分页查询接口。
      this.$store.dispatch("QueryArticleByCatalogNameAndPageNum", pager).then(response => {
           let code = response.data.code;
           if (code === 200) {
               this.pager = response.data.data;
            }
          }).catch((err) => {
               console.log(err)
          });
      },
      ...
   }  
 } 
</script>

注意:后端实现分页时,前端是不需要获得总记录数据集合。只需在pager对象中包含总记录数量即可,这样通过总记录数/每页记录数,可以计算出总页数。并且总是默认从第一页开始渲染。后端分页接口实现推荐使用Mybatis-Plus的IPage接口或者Springboot的PageHelper实现。