vue3+elementuiPlus 实现分页组件封装

效果图
在这里插入图片描述

pageComponent.vue

<template>
  <div class="pagination-container">
    <el-pagination
      :small="small"
      :background="background"
      v-model:currentPage="currentPage"
      v-model:pageSize="pageSize"
      :layout="layout"
      :pager-count="pagerCount"
      :total="total"
      :page-sizes="pageSizes"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</template>

<script setup lang="ts">
import { defineProps, defineEmits, computed } from "vue";

const emits = defineEmits(["pagChange", "update:page", "update:size"]);

//计算属性-currentPage
const currentPage = computed({
  get() {
    return props.page;
  },
  set(val) {
    emits("update:page", val);
  },
});
// const locale = computed(() => (language.value === 'zh-cn' ? zhCn : en))

//计算属性-pageSize
const pageSize = computed({
  get() {
    return props.size;
  },
  set(val) {
    emits("update:size", val);
  },
});

//组件传参
const props = defineProps({
  //当前页数
  page: {
    type: Number,
    default: 1,
  },
  //每页条数
  size: {
    type: Number,
    default: 10,
  },
  //是否使用小型分页样式
  small: {
    type: Boolean,
    default: false,
  },
  //是否为分页按钮添加背景色
  background: {
    type: Boolean,
    default: false,
  },
  //组件布局,子组件名用逗号分隔
  layout: {
    type: String,
    default: "total, sizes, prev, pager, next, jumper",
  },
  //设置最大页码按钮数。 页码按钮的数量,当总页数超过该值时会折叠
  pagerCount: {
    type: Number,
    default: 7,
  },
  //总条目数
  total: {
    type: Number,
    required: true,
  },
  //每页显示个数选择器的选项设置
  pageSizes: {
    type: Array,
    default: () => [10, 20, 30, 50],
  },
  //class悬浮样式(left / right)
  float: {
    type: String,
    default: "right",
  },
});

//每页显示条数改变
const handleSizeChange = () => {
  emits("pagChange");
};

//页数改变
const handleCurrentChange = () => {
  emits("pagChange");
};
</script>

<style lang="scss" scoped>
.pagination-container {
  float: v-bind("float");
  margin: 15px 0;
  background-color: #ffffff;
}
</style>

使用

<!--分页参数详解page:当前页;size:每页条数;total:总条数;pagChange:分页条件改变触发查询表格数据的方法-->
<page-component
              v-model:page="ipagination.currentPage"
              v-model:size="ipagination.pageSize"
              layout="total, prev, pager, next, jumper"
              :total="ipagination.total"
              @pagChange="loadData"
            />
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值