Pagination 分页

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

何时使用

  • 当加载/渲染所有数据将花费很多时间时;
  • 可切换页码浏览数据。

代码演示

Pagination 分页 - 图1

基本

基础分页。

  1. <template>
  2. <a-pagination v-model="current" :total="50" />
  3. </template>
  4. <script>
  5. export default {
  6. data() {
  7. return {
  8. current: 2,
  9. };
  10. },
  11. };
  12. </script>

Pagination 分页 - 图2

更多

更多分页。

  1. <template>
  2. <a-pagination :defaultCurrent="6" :total="500" />
  3. </template>

Pagination 分页 - 图3

改变

改变每页显示条目数。

  1. <template>
  2. <div>
  3. <a-pagination
  4. showSizeChanger
  5. @showSizeChange="onShowSizeChange"
  6. :defaultCurrent="3"
  7. :total="500"
  8. />
  9. <br />
  10. <a-pagination
  11. showSizeChanger
  12. :pageSize.sync="pageSize"
  13. @showSizeChange="onShowSizeChange"
  14. :total="500"
  15. v-model="current"
  16. />
  17. </div>
  18. </template>
  19. <script>
  20. export default {
  21. data() {
  22. return {
  23. pageSize: 20,
  24. current: 4,
  25. };
  26. },
  27. watch: {
  28. pageSize(val) {
  29. console.log('pageSize', val);
  30. },
  31. current(val) {
  32. console.log('current', val);
  33. },
  34. },
  35. methods: {
  36. onShowSizeChange(current, pageSize) {
  37. console.log(current, pageSize);
  38. },
  39. },
  40. };
  41. </script>

Pagination 分页 - 图4

自定义下拉选项

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

  1. <template>
  2. <a-pagination
  3. :pageSizeOptions="pageSizeOptions"
  4. :total="total"
  5. showSizeChanger
  6. :pageSize="pageSize"
  7. v-model="current"
  8. @showSizeChange="onShowSizeChange"
  9. >
  10. <template slot="buildOptionText" slot-scope="props">
  11. <span v-if="props.value!=='50'">{{props.value}}条/页</span>
  12. <span v-if="props.value==='50'">全部</span>
  13. </template>
  14. </a-pagination>
  15. </template>
  16. <script>
  17. export default {
  18. data() {
  19. return {
  20. pageSizeOptions: ['10', '20', '30', '40', '50'],
  21. current: 1,
  22. pageSize: 10,
  23. total: 50,
  24. };
  25. },
  26. methods: {
  27. onShowSizeChange(current, pageSize) {
  28. this.pageSize = pageSize;
  29. },
  30. },
  31. };
  32. </script>

Pagination 分页 - 图5

跳转

快速跳转到某一页。

<template>
  <a-pagination showQuickJumper :defaultCurrent="2" :total="500" @change="onChange" />
</template>
<script>
  export default {
    methods: {
      onChange(pageNumber) {
        console.log('Page: ', pageNumber);
      },
    },
  };
</script>

Pagination 分页 - 图6

迷你

迷你版本。

<template>
  <div id="components-pagination-demo-mini">
    <a-pagination size="small" :total="50" />
    <a-pagination size="small" :total="50" showSizeChanger showQuickJumper />
    <a-pagination size="small" :total="50" :showTotal="total => `Total ${total} items`" />
  </div>
</template>
<style scoped>
  #components-pagination-demo-mini .ant-pagination:not(:last-child) {
    margin-bottom: 24px;
  }
</style>

Pagination 分页 - 图7

简洁

简单的翻页。

<template>
  <a-pagination simple :defaultCurrent="2" :total="50" />
</template>

Pagination 分页 - 图8

受控

受控制的页码。

<template>
  <a-pagination @change="onChange" :current="current" :total="50" />
</template>
<script>
  export default {
    data() {
      return {
        current: 3,
      };
    },
    methods: {
      onChange(current) {
        this.current = current;
      },
    },
  };
</script>

Pagination 分页 - 图9

总数

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

<template>
  <div>
    <a-pagination
      :total="85"
      :showTotal="total => `Total ${total} items`"
      :pageSize="20"
      :defaultCurrent="1"
    />
    <br />
    <a-pagination
      :total="85"
      :showTotal="(total, range) => `${range[0]}-${range[1]} of ${total} items`"
      :pageSize="20"
      :defaultCurrent="1"
    />
  </div>
</template>

Pagination 分页 - 图10

上一步和下一步

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

<template>
  <a-pagination :total="500" :itemRender="itemRender" />
</template>
<script>
  export default {
    methods: {
      itemRender(current, type, originalElement) {
        if (type === 'prev') {
          return <a>Previous</a>;
        } else if (type === 'next') {
          return <a>Next</a>;
        }
        return originalElement;
      },
    },
  };
</script>

API

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

事件

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