Skip to content

Pager 分页组件

基于 Element Plus 分页组件封装的通用分页组件,支持页码跳转、每页条数切换等功能。

基础用法

::: demo

vue
<template>
  <div>
    <div class="demo-content">
      <p>当前页:{{ pager.currentPage }}</p>
      <p>每页条数:{{ pager.pageSize }}</p>
      <p>总条数:{{ total }}</p>
    </div>
    <by-pager
      :current-page="pager.currentPage"
      :page-size="pager.pageSize"
      :total="total"
      :page-sizes="pageSizes"
      @change="handlePageChange"
    />
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'

const total = ref(100)

const pager = reactive({
  currentPage: 1,
  pageSize: 25,
})

const pageSizes = ref([10, 15, 20, 25, 30, 50, 100])

const handlePageChange = (values) => {
  pager.currentPage = values.currentPage
  pager.pageSize = values.pageSize
  console.log('分页变化:', values)
}
</script>

<style scoped>
.demo-content {
  padding: 20px;
  background: #f5f5f5;
  margin-bottom: 20px;
  border-radius: 4px;
}
.demo-content p {
  margin: 5px 0;
}
</style>

:::

自定义每页条数选项

::: demo

vue
<template>
  <div>
    <div class="demo-content">
      <p>当前页:{{ pager.currentPage }}</p>
      <p>每页条数:{{ pager.pageSize }}</p>
      <p>总条数:{{ total }}</p>
    </div>
    <by-pager
      :current-page="pager.currentPage"
      :page-size="pager.pageSize"
      :total="total"
      :page-sizes="customPageSizes"
      @change="handlePageChange"
    />
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'

const total = ref(500)

const pager = reactive({
  currentPage: 1,
  pageSize: 50,
})

const customPageSizes = ref([20, 50, 100, 200])

const handlePageChange = (values) => {
  pager.currentPage = values.currentPage
  pager.pageSize = values.pageSize
  console.log('分页变化:', values)
}
</script>

<style scoped>
.demo-content {
  padding: 20px;
  background: #f5f5f5;
  margin-bottom: 20px;
  border-radius: 4px;
}
.demo-content p {
  margin: 5px 0;
}
</style>

:::

大数据量分页

::: demo

vue
<template>
  <div>
    <div class="demo-content">
      <p>当前页:{{ pager.currentPage }}</p>
      <p>每页条数:{{ pager.pageSize }}</p>
      <p>总条数:{{ total }}</p>
    </div>
    <by-pager :current-page="pager.currentPage" :page-size="pager.pageSize" :total="total" @change="handlePageChange" />
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'

const total = ref(10000)

const pager = reactive({
  currentPage: 1,
  pageSize: 25,
})

const handlePageChange = (values) => {
  pager.currentPage = values.currentPage
  pager.pageSize = values.pageSize
  console.log('分页变化:', values)
}
</script>

<style scoped>
.demo-content {
  padding: 20px;
  background: #f5f5f5;
  margin-bottom: 20px;
  border-radius: 4px;
}
.demo-content p {
  margin: 5px 0;
}
</style>

:::

API

Props

参数说明类型默认值
currentPage当前页码number1
pageSize每页条数number25
total总条数number-
pageSizes每页条数选项array[10, 15, 20, 25, 30, 50, 100]

Events

事件名说明回调参数
change分页变化时触发(values: PagerConfig)

PagerConfig 数据结构

属性说明类型默认值
currentPage当前页码number-
pageSize每页条数number-

Released under the MIT License.