当前位置: 首页 > news >正文

vue3封装el-pagination分页组件

1、效果如图:
在这里插入图片描述
2、分页组件代码:

<template>
  <div class="paging">
    <el-config-provider :locale="zhCn">
      <el-pagination
        v-model:current-page="page.currentPage"
        v-model:page-size="page.pageSize"
        :background="page.background"
        :layout="page.layout"
        :total="page.total"
        @size-change="page.handleSizeChange"
        @current-change="page.handleCurrentChange"
      />
    </el-config-provider>
  </div>
</template>

<script setup>
import { ElConfigProvider } from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn';
zhCn.el.pagination.goto = "到第"
const props = defineProps({
  total: {
    required: true,
    type: Number,
    default: 300
  },
  // 当前页数
  currentPage: {
    type: Number,
    default: 1
  },
  // 分页
  pageSize: {
    type: Array,
    default: () => {
      return [10, 20, 30, 50, 100]
    }
  },
  limit: {
    type: Number,
    default: 10
  },
  layout: {
    type: String,
    default: 'total, sizes, prev, pager, next, jumper'
  },
  background: {
    type: Boolean,
    default: () => {
      return true
    },
  },
});
const emit = defineEmits();
const currentPage = computed({
    get() {
        return props.currentPage
    },
    set(val) {
        emit('update:currentPage', val)
    }
})

const pageSize = computed({
    get() {
        return props.limit
    },
    set(val) {
        emit('update:limit', val)
    }
})
const page  = reactive({
  background:props.background,
  currentPage:props.currentPage,
  pageSize:props.pageSize[0],
  layout:props.layout,
  total:props.total,
  handleSizeChange:(val)=>{
    console.log(`${val} items per page`)
    emit('handleSizeChange', val);

  },
  handleCurrentChange:(val)=>{
    console.log(`current page: ${val}`)
    emit('handleCurrentChange', val);

  }
});
</script>

<style lang="scss" scoped>
</style>

3、使用代码:

**结构:**
<template>
<Paging
   :current-page="page.currentPage"
   :page-size="page.pageSize"
   :background="page.background"
   :layout="page.layout"
   :total="page.total"
   :limit="page.limit"
   @handleSizeChange="page.handleSizeChange"
   @handleCurrentChange="page.handleCurrentChange"
 ></Paging>
</template>

**js:**
<script setup>
import Paging from "@/components/paging";//引入分页组件
const page = reactive({
  layout:'prev, pager, next, jumper',
  currentPage:1,
  limit:10,
  total:300,
  handleSizeChange:(val)=>{
    page.pageSize = val
  },
  handleCurrentChange:(val)=>{
   page.currentPage = val
  }
})
</script>

相关文章:

  • Python 一些常见的字符串操作
  • 【VS Code+Verilog+Vivado使用】(1)常用插件
  • 【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】
  • CSAPP shelllab
  • [docker] Docker 网络
  • qemu + vscode图形化调试linux kernel
  • openssl3.2/test/certs - 056 - all DNS-like CNs allowed by CA1, no SANs
  • 项目解决方案:市小区高清视频监控平台联网整合设计方案(上)
  • python flask request教程
  • JS-Window常见对象
  • 精要图示:园区金融数字化服务蓝图,以园区为支点推动信贷业务增长
  • Linux:简单聊聊线程调度
  • 百度搜索智能精选是什么东西、怎么加入?
  • Linux实验记录:使用RAID(独立冗余磁盘阵列)
  • PyInstaller 将 Python 程序生成可直接运行的程序
  • Emergent Abilities of Large Language Models 机翻mark
  • IDEA 构建开发环境
  • 《微信小程序开发从入门到实战》学习九十六
  • Vulnhub靶场DC-3
  • 深入了解Redis:选择适用于你的场景的持久化方案
  • 领证不用户口本,还需哪些材料?补领证件如何操作?七问七答
  • 上海发布大风黄警:预计未来24小时内将出现8-10级大风
  • 体坛联播|双杀阿森纳,巴黎晋级欧冠决赛对阵国际米兰
  • 公募基金行业迎系统性变革:基金公司业绩差必须少收费
  • 央行行长详解降息:将通过利率自律机制引导商业银行相应下调存款利率
  • 赵乐际:深入学习贯彻习近平生态文明思想,推动森林法全面有效贯彻实施