超好用的element的el-pagination分页组件二次封装-附源码及讲解

前言:在很多后台管理系统开发时总会有很多分页组件的使用,如果我们每次都用elementui官网的el-pagination去写的话,调整所有分页的样式就会很麻烦,而且页面内容也会很累赘繁琐。

讲解一个我经常使用的二次封装el-pagination组件,该组件非常方便快捷。所有例子都是使用vue2+elementUI,如要使用vue3稍作修改即可,也可评论问我

效果展示:

一、先上组件代码:

html 复制代码
<template>
  <div
    :class="{'hidden':hidden}"
    class="pagination-container"
  >
    <el-pagination
      :small="size"
      :background="background"
      :current-page.sync="currentPage"
      :page-size.sync="pageSize"
      :layout="layout"
      :page-count="pageCount"
      :page-sizes="pageSizes"
      :total="total"
      v-bind="$attrs"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</template>

<script>
// import { scrollTo } from '@/utils/scroll-to'

export default {
  name: 'Pagination',
  props: {
    size: {
      type: Boolean,
      default: false
    },
    total: {
      type: Number
    },
    pageCount: {
      type: Number
    },
    page: {
      type: Number,
      default: 1
    },
    limit: {
      type: Number,
      default: 20
    },
    pageSizes: {
      type: Array,
      default() {
        return [10, 20, 30, 50]
      }
    },
    layout: {
      type: String,
      default: 'total, sizes, prev, pager, next, jumper'
    },
    background: {
      type: Boolean,
      default: true
    },
    autoScroll: {
      type: Boolean,
      default: true
    },
    hidden: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    currentPage: {
      get() {
        return this.page
      },
      set(val) {
        this.$emit('update:page', val)
      }
    },
    pageSize: {
      get() {
        return this.limit
      },
      set(val) {
        this.$emit('update:limit', val)
      }
    }
  },
  methods: {
    handleSizeChange(val) {
      this.currentPage = 1
      this.$emit('pagination', { page: this.currentPage, limit: val })
      // if (this.autoScroll) {
      //   scrollTo(0, 800)
      // }
    },
    handleCurrentChange(val) {
      this.$emit('pagination', { page: val, limit: this.pageSize })
      // if (this.autoScroll) {
      //   scrollTo(0, 800)
      // }
    }
  }
}
</script>

<style scoped>
.pagination-container {
  /* background: #fff; */
  padding: 32px 16px;
}
.pagination-container.hidden {
  display: none;
}
</style>

二、使用该组件

1、引入注册该组件

javascript 复制代码
import Pagination from "@/components/Pagination";

2、在需要的html上使用

(我一般都是搭配el-table去使用的,表格组件封装请看我的另一篇帖子)

html 复制代码
      <Pagination
        v-show="total > 0"
        :total="total"
        :page.sync="listQuery.page"
        :limit.sync="listQuery.limit"
        @pagination="listQueryFn"
      />

三、解释参数

1、total是总条目数

一般来说后端传过来的表格数据要顺带着传给前端一个总数,直接赋值给total就行

2、listQuery对象

javascript 复制代码
      listQuery: {
        page: 1,
        limit: 10,
      },

page:当前是第几页 limit:当前页展示多少条

一般默认都是第一页,十条,这个listQuery就是要传给后端去获取表格数据的

3、listQueryFn

listQueryFn是放前端请求接口的函数,我这里红框只是个示意,用的时候写成自己的接口就行

一般来说listQueryFn函数需要在页面刚加载的时候就调用一下、页面按搜索按钮的时候也要调用一下,再就是用户点击下一页的时候调用。

相关推荐
Penk是个码农4 分钟前
web前端面试-- MVC、MVP、MVVM 架构模式对比
前端·面试·mvc
markyankee1015 分钟前
Vue.js 入门指南:从零开始构建你的第一个应用
vue.js
MrSkye7 分钟前
🔥JavaScript 入门必知:代码如何运行、变量提升与 let/const🔥
前端·javascript·面试
白瓷梅子汤11 分钟前
跟着官方示例学习 @tanStack-form --- Linked Fields
前端·react.js
爱学习的茄子15 分钟前
深入理解JavaScript闭包:从入门到精通的实战指南
前端·javascript·面试
zhanshuo1 小时前
不依赖框架,如何用 JS 实现一个完整的前端路由系统
前端·javascript·html
火柴盒zhang1 小时前
websheet在线电子表格(spreadsheet)在集团型企业财务报表中的应用
前端·html·报表·合并·spreadsheet·websheet·集团财务
讨厌吃蛋黄酥1 小时前
智能前端新纪元:语音交互技术与安全实践全解析
javascript
khalil1 小时前
基于 Vue3实现一款简历生成工具
前端·vue.js
拾光拾趣录1 小时前
浏览器对队头阻塞问题的深度优化策略
前端·浏览器