功能完整的分页组件,支持总条数显示、每页条数选择、页码跳转和自定义布局。
<script setup lang="ts">
const page = ref(1)
const size = ref(10)
const total = ref(100)
</script>
<template>
<FaPagination v-model:page="page" v-model:size="size" :total="total" />
</template>| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
total | number | 必需 | 数据总条数 |
sizes | number[] | [10, 20, 30, 40, 50, 100] | 每页条数选项 |
layout | string | 'total, sizes, ->, pager, jumper' | 布局配置 |
page | number | 必需 | 当前页码(支持 v-model) |
size | number | 必需 | 每页条数(支持 v-model) |
| 事件名 | 参数 | 说明 |
|---|---|---|
pageChange | page: number | 页码变化时触发 |
sizeChange | size: number | 每页条数变化时触发 |
无
<script setup lang="ts">
const page = ref(1)
const total = ref(100)
</script>
<template>
<FaPagination v-model:page="page" :total="total" />
</template><script setup lang="ts">
const page = ref(1)
const size = ref(10)
const total = ref(500)
</script>
<template>
<FaPagination v-model:page="page" v-model:size="size" :total="total" />
</template><script setup lang="ts">
const page = ref(1)
const size = ref(20)
const total = ref(500)
</script>
<template>
<FaPagination
v-model:page="page"
v-model:size="size"
:total="total"
:sizes="[20, 50, 100, 200]"
/>
</template><script setup lang="ts">
const page = ref(1)
const total = ref(100)
</script>
<template>
<FaPagination v-model:page="page" :total="total" layout="pager" />
</template><template>
<FaPagination
v-model:page="page"
:total="total"
layout="total, ->, pager"
/>
</template><script setup lang="ts">
const page = ref(1)
const size = ref(10)
const total = ref(1000)
</script>
<template>
<FaPagination
v-model:page="page"
v-model:size="size"
:total="total"
layout="total, sizes, ->, pager, jumper"
/>
</template><script setup lang="ts">
const page = ref(1)
const size = ref(10)
const total = ref(100)
function onPageChange(newPage: number) {
console.log('页码变为:', newPage)
// 加载新页面数据
}
function onSizeChange(newSize: number) {
console.log('每页条数变为:', newSize)
page.value = 1 // 重置页码
// 加载新数据
}
</script>
<template>
<FaPagination
v-model:page="page"
v-model:size="size"
:total="total"
@page-change="onPageChange"
@size-change="onSizeChange"
/>
</template><script setup lang="ts">
const page = ref(1)
const size = ref(10)
const total = ref(100)
const data = ref([])
// 加载数据
function loadData() {
// API 调用获取数据
}
watch([page, size], loadData)
</script>
<template>
<div>
<table>
<thead>
<tr>
<th>姓名</th>
<th>邮箱</th>
</tr>
</thead>
<tbody>
<tr v-for="item in data" :key="item.id">
<td>{{ item.name }}</td>
<td>{{ item.email }}</td>
</tr>
</tbody>
</table>
<FaPagination v-model:page="page" v-model:size="size" :total="total" />
</div>
</template>layout 属性控制分页组件的布局和元素顺序,支持以下元素:
| 元素 | 说明 |
|---|---|
total | 显示总条数 |
sizes | 每页条数选择器 |
pager | 页码按钮组 |
jumper | 页码跳转输入框 |
-> | 弹性占位符(将后续元素推到右侧) |
<!-- 左侧总条数,中间页码,右侧跳转 -->
<FaPagination layout="total, ->, pager, jumper" />
<!-- 仅显示页码 -->
<FaPagination layout="pager" />
<!-- 总条数 + 每页条数 + 分页器 -->
<FaPagination layout="total, sizes, pager" />total、page、size 为必需属性page 和 size 支持 v-model 双向绑定