封装分页器el-pagination

531 阅读1分钟

封装分页器el-pagination,主要是因为传参不同,目前遇见过两种情况:

1、参数:当前页码&&每页显示的条数

直接通过分页器获取内容数据

<!-- 封装element-ui分页器 -->
<el-pagination
      :current-page="currentPage"
      :total="totalPage"
      :page-size="limitPage"
      :page-sizes="[3, 5, 10]"
      layout="sizes, prev, pager, next,total,jumper"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
>
</el-pagination>
    
<!-- js部分的代码 -->
<script>
    export default {
      data() {
        return {
          currentPage: 1,
          totalPage: 30,
          limitPage: 5,
        };
      },
      mounted() {
      //获取页码
      this.getPagelist();
      },
      methods: {
        async getPagelist() {
          // 传递参数:当前页码&&每页显示的条数
          const { currentPage, limitPage } = this;
          let pagelist = await this.$API.trademark.reqTradeMark(
              currentPage,
              limitPage
          );
          if (pagelist.code == 200) {
            this.totalPage = pagelist.data.total;
            this.trademarklist = pagelist.data.records;
          }
        },
        // 修改每页显示的条数
        handleSizeChange(val) {
          this.limitPage = val;
          this.getPagelist();
        },
        // 改变当前页【可省的回调函数】
        handleCurrentChange(val) {
          this.currentPage = val;
          this.getPagelist();
        },
      },
    };
</script>

如果el-table中有序号这一项,且序号要跟随数目变化的话,要添加一个属性: <el-table-column type="index" label="序号" width="50" :index="changeindex" >

changeindex(index) {
      return index + 1 + this.limitPage * (this.currentPage - 1);
    },

对应分页器样式: image.png

省一个回调函数的写法:
// 函数调用时直接调用获取页码方法
@current-change="getPagelist"
// 获取页码方法
// 点击页码时,传递页码数,其余情况,使用默认值:1
async getPagelist(pages = 1) {
    // 传递参数:当前页码&&每页显示的条数
    this.currentPage = pages;
    const { currentPage, limitPage } = this;
    let pagelist = await this.$API.trademark.reqTradeMark(
          currentPage,
          limitPage
    );
    if (pagelist.code == 200) {
          this.totalPage = pagelist.data.total;
          this.trademarklist = pagelist.data.records;
    }
},

2、参数:偏移量&&每页显示的条数

获取count总数之后,再获取列表数据

<el-pagination
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-sizes="[10, 20, 30, 40]"
    :page-size="limit"
    layout="total, sizes, prev, pager, next, jumper"
    :total="count"
>
</el-pagination>
      
<script>
     export default {
          data() {
            return {   
            list:[],
              count: 0,
              currentPage: 1,
              offset: 0,
              limit: 10,
            };
          },
          mounted() {
            this.getCount();
            this.getData();
          },
          methods: {
            getCount() {
              axios({
                url: "https://elm.cangdu.org/shopping/restaurants/count",
                method: "get",
              }).then((response) => {
                //获取count总数
                this.count = response.data.count;
              });
            },
            handleSizeChange(val) {
              console.log(`每页 ${val} 条`);
              this.limit = val;
              this.offset = (this.currentPage - 1) * this.limit;
              this.getData();
            },
            handleCurrentChange(val) {
              console.log(`当前页: ${val}`);
              this.currentPage = val;
              this.offset = (val - 1) * this.limit;
              this.getData();
            },
            async getData() {
              const param = {
                latitude: "31.22967",
                longitude: "121.4762",
                offset: this.offset,
                limit: this.limit,
              };
              const result = await getShoplist(param);
              if (result.status == 200) {
                  this.list = result.data;
              };
           }
     },
};
</script>

补充知识点:

1.将分页器居中时,在el-pagination中添加属性style="text-align: center"

2.调整分页器的布局时,调整el-pagination的layout属性值的顺序即可,若想让某一部分在最右边,则使用 -> 符号即可
举例:layout="prev, pager, next, jumper,->,sizes,total"
图:截屏2022-10-02 上午11.32.37.png