Pagination分页 - 图1

Pagination 分页

采用分页的形式分隔长列表,每次只加载一个页面。

代码演示

  • Pagination分页 - 图2
  • 1
  • 2
  • 3
  • 4
  • 5
  • Pagination分页 - 图3

基本

基础分页。

  1. <template>
  2. <a-pagination v-model:current="current" :total="50" show-less-items />
  3. </template>
  4. <script lang="ts">
  5. import { defineComponent } from 'vue';
  6. export default defineComponent({
  7. setup() {
  8. return {
  9. current: 2,
  10. };
  11. },
  12. });
  13. </script>
  • Pagination分页 - 图4
  • 1
  • Pagination分页 - 图5•••

  • 4

  • 5
  • 6
  • 7
  • 8
  • Pagination分页 - 图6•••

  • 50

  • Pagination分页 - 图7

更多

更多分页。

  1. <template>
  2. <a-pagination v-model:current="current" :total="500" />
  3. </template>
  4. <script lang="ts">
  5. import { defineComponent } from 'vue';
  6. export default defineComponent({
  7. setup() {
  8. return {
  9. current: 6,
  10. };
  11. },
  12. });
  13. </script>

Pagination分页 - 图8

改变

改变每页显示条目数。

  1. <template>
  2. <div>
  3. <a-pagination
  4. show-size-changer
  5. v-model:current="current1"
  6. v-model:pageSize="pageSize"
  7. :total="500"
  8. @showSizeChange="onShowSizeChange"
  9. />
  10. <br />
  11. <a-pagination
  12. v-model:current="current2"
  13. show-size-changer
  14. :total="500"
  15. disabled
  16. @showSizeChange="onShowSizeChange"
  17. />
  18. </div>
  19. </template>
  20. <script lang="ts">
  21. import { defineComponent, ref, watch } from 'vue';
  22. export default defineComponent({
  23. setup() {
  24. const pageSize = ref(20);
  25. const current1 = ref(3);
  26. const current2 = ref(4);
  27. const onShowSizeChange = (current: number, pageSize: number) => {
  28. console.log(current, pageSize);
  29. };
  30. watch(pageSize, () => {
  31. console.log('pageSize', pageSize.value);
  32. });
  33. watch(current1, () => {
  34. console.log('current', current1.value);
  35. });
  36. return {
  37. pageSize,
  38. current1,
  39. current2,
  40. onShowSizeChange,
  41. };
  42. },
  43. });
  44. </script>
  • Pagination分页 - 图9
  • 1
  • 2
  • 3
  • 4
  • 5
  • Pagination分页 - 图10
  • 10条/页

    Pagination分页 - 图11

自定义下拉选项

自定义下拉选项,例如添加全部选项

  1. <template>
  2. <a-pagination
  3. v-model:current="current"
  4. :page-size-options="pageSizeOptions"
  5. :total="total"
  6. show-size-changer
  7. :page-size="pageSize"
  8. @showSizeChange="onShowSizeChange"
  9. >
  10. <template #buildOptionText="props">
  11. <span v-if="props.value !== '50'">{{ props.value }}条/页</span>
  12. <span v-else>全部</span>
  13. </template>
  14. </a-pagination>
  15. </template>
  16. <script lang="ts">
  17. import { defineComponent, ref } from 'vue';
  18. export default defineComponent({
  19. setup() {
  20. const pageSizeOptions = ref<string[]>(['10', '20', '30', '40', '50']);
  21. const current = ref(1);
  22. const pageSizeRef = ref(10);
  23. const total = ref(50);
  24. const onShowSizeChange = (current: number, pageSize: number) => {
  25. console.log(pageSize);
  26. pageSizeRef.value = pageSize;
  27. };
  28. return {
  29. pageSizeOptions,
  30. current,
  31. pageSize: pageSizeRef,
  32. total,
  33. onShowSizeChange,
  34. };
  35. },
  36. });
  37. </script>

Pagination分页 - 图12

跳转

快速跳转到某一页。

  1. <template>
  2. <div>
  3. <a-pagination show-quick-jumper v-model:current="current1" :total="500" @change="onChange" />
  4. <br />
  5. <a-pagination
  6. show-quick-jumper
  7. v-model:current="current2"
  8. :total="500"
  9. disabled
  10. show-less-items
  11. @change="onChange"
  12. />
  13. </div>
  14. </template>
  15. <script lang="ts">
  16. import { defineComponent, ref } from 'vue';
  17. export default defineComponent({
  18. setup() {
  19. const current1 = ref<number>(1);
  20. const current2 = ref<number>(2);
  21. const onChange = (pageNumber: number) => {
  22. console.log('Page: ', pageNumber);
  23. };
  24. return {
  25. current1,
  26. current2,
  27. onChange,
  28. };
  29. },
  30. });
  31. </script>

Pagination分页 - 图13

迷你

迷你版本。

  1. <template>
  2. <div id="components-pagination-demo-mini">
  3. <a-pagination size="small" :total="50" />
  4. <a-pagination size="small" :total="50" show-size-changer show-quick-jumper />
  5. <a-pagination size="small" :total="50" :show-total="total => `Total ${total} items`" />
  6. </div>
  7. </template>
  8. <style scoped>
  9. #components-pagination-demo-mini .ant-pagination:not(:last-child) {
  10. margin-bottom: 24px;
  11. }
  12. </style>
  • Pagination分页 - 图14
  • /5
  • Pagination分页 - 图15

简洁

简单的翻页。

  1. <template>
  2. <a-pagination simple v-model:current="current" :total="50" />
  3. </template>
  4. <script lang="ts">
  5. import { defineComponent, ref } from 'vue';
  6. export default defineComponent({
  7. setup() {
  8. const current = ref<number>(2);
  9. return {
  10. current,
  11. };
  12. },
  13. });
  14. </script>

Pagination分页 - 图16

总数

通过设置 showTotal 展示总共有多少数据。

  1. <template>
  2. <div>
  3. <a-pagination
  4. :total="85"
  5. :show-total="total => `Total ${total} items`"
  6. :page-size="20"
  7. v-model:current="current1"
  8. />
  9. <br />
  10. <a-pagination
  11. :total="85"
  12. :show-total="(total, range) => `${range[0]}-${range[1]} of ${total} items`"
  13. :page-size="20"
  14. v-model:current="current2"
  15. />
  16. </div>
  17. </template>
  18. <script lang="ts">
  19. import { defineComponent, ref } from 'vue';
  20. export default defineComponent({
  21. setup() {
  22. const current1 = ref<number>(1);
  23. const current2 = ref<number>(2);
  24. const onChange = (pageNumber: number) => {
  25. console.log('Page: ', pageNumber);
  26. };
  27. return {
  28. current1,
  29. current2,
  30. onChange,
  31. };
  32. },
  33. });
  34. </script>
  • Previous
  • 1
  • 2
  • 3
  • 4
  • 5
  • Pagination分页 - 图17•••

  • 50

  • Next

上一步和下一步

修改上一步和下一步为文字链接。

  1. <template>
  2. <a-pagination :total="500">
  3. <template #itemRender="{ page, type, originalElement }">
  4. <a v-if="type === 'prev'">Previous</a>
  5. <a v-else-if="type === 'next'">Next</a>
  6. <renderVNode v-else :vnode="originalElement"></renderVNode>
  7. </template>
  8. </a-pagination>
  9. </template>
  10. <script lang="ts">
  11. import { defineComponent, ref, watch } from 'vue';
  12. function renderVNode(_, { attrs: { vnode } }) {
  13. return vnode;
  14. }
  15. export default defineComponent({
  16. components: {
  17. renderVNode,
  18. },
  19. });
  20. </script>

API

  1. <a-pagination @change="onChange" :total="50" />
参数说明类型默认值版本
current(v-model)当前页数number-
pageSize(v-model)每页条数number-
defaultPageSize默认的每页条数number10
disabled禁用分页boolean-1.5.0
hideOnSinglePage只有一页时是否隐藏分页器booleanfalse
itemRender用于自定义页码的结构,可用于优化 SEO({page, type: ‘page’ | ‘prev’ | ‘next’, originalElement}) => vNode | v-slot-
pageSizeOptions指定每页可以显示多少条string[][‘10’, ‘20’, ‘30’, ‘40’]
showLessItems是否显示较少页面内容booleanfalse1.5.0
showQuickJumper是否可以快速跳转至某页booleanfalse
showSizeChanger是否可以改变 pageSizebooleanfalse
showTotal用于显示数据总量和当前数据顺序Function(total, range)-
simple当添加该属性时,显示为简单分页boolean-
size当为「small」时,是小尺寸分页string“”
total数据总数number0

事件

事件名称说明回调参数
change页码改变的回调,参数是改变后的页码及每页条数Function(page, pageSize)
showSizeChangepageSize 变化的回调Function(current, size)