Skip to content

Pagination 分页

介绍

当数据量较多时,采用分页的形式分隔长列表。

基础用法

通过 v-model 来绑定当前页码。

html
<template>
  <nut-pagination v-model="currentPage" :total-items="25" :items-per-page="5" @change="pageChange" />
</template>
<script lang="ts">
import { ref, reactive, toRefs } from 'vue';
export default {
  setup() {
    const state = reactive({
      currentPage: 1,
    });
    const pageChange = (value: number) => {
      console.log(value);
    };

    return {
      ...toRefs(state),
      pageChange
    };
  }
};
</script>
<style lang="scss">
  .nut-pagination {
    margin-left:20px;
  }
</style>

简单模式

将 mode 设置为 simple 来切换到简单模式,此时分页器不会展示具体的页码按钮。

html
<template>
  <nut-pagination v-model="currentPage1" :page-count="12" mode="simple" @change="pageChange" />
</template>
<script lang="ts">
import { ref, reactive, toRefs } from 'vue';
export default {
  setup() {
    const state = reactive({
      currentPage1: 1,
    });
    const pageChange = (value: number) => {
      console.log(value);
    };

    return {
      ...toRefs(state),
      pageChange
    };
  }
};
</script>
<style lang="scss">
  .nut-pagination {
    margin-left:20px;
  }
</style>

显示省略号

设置 force-ellipses 后会展示省略号按钮,点击后可以快速跳转。

html
<template>
  <nut-pagination v-model="currentPage2" :total-items="125" :show-page-size="3"  @change="pageChange"  force-ellipses/>
</template>
<script lang="ts">
import { ref, reactive, toRefs } from 'vue';
export default {
  setup() {
    const state = reactive({
      currentPage2: 1,
    });
    const pageChange = (value: number) => {
      console.log(value);
    };

    return {
      ...toRefs(state),
      pageChange
    };
  }
};
</script>
<style lang="scss">
  .nut-pagination {
    margin-left:20px;
  }
</style>

自定义按钮

设置 force-ellipses 后会展示省略号按钮,点击后可以快速跳转。

html
<template>
  <nut-pagination v-model="currentPage3" :total-items="500"  @change="pageChange"  :show-page-size="5">
      <template #prevText>
        <nut-icon name="left" size="10px" />
      </template>
      <template #nextText>
        <nut-icon name="right" size="10px" />
      </template>
      <template #page="{ item }">
          {{ item.number == 3 ? 'hot' : item.text }}
      </template>
  </nut-pagination>
</template>
<script lang="ts">
import { ref, reactive, toRefs } from 'vue';
export default {
  setup() {
    const state = reactive({
      currentPage3: 1,
    });
    const pageChange = (value: number) => {
      console.log(value);
    };

    return {
      ...toRefs(state),
      pageChange
    };
  }
};
</script>
<style lang="scss">
  .nut-pagination {
    margin-left:20px;
  }
</style>

API

Props

参数说明类型默认值
v-model当前页码number1
mode显示模式,可选值为 simplestringmulti
prev-text上一页按钮文字string上一页
next-text下一页按钮文字string下一页
page-count总页数string | number传入/根据页数计算
total-items总记录数string | number0
items-per-page每页记录数string | number10
show-page-size显示的页码个数string | number5
force-ellipses是否显示省略号booleanfalse

Events

事件名说明回调参数
change页码改变时触发value

Slots

名称描述参数
prevText自定义上一页按钮内容-
nextText自定义下一页按钮内容-
page自定义页码-

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值
--nut-pagination-colorvar(--nut-primary-color)
--nut-pagination-font-sizevar(--nut-font-size-2)
--nut-pagination-item-border-color#e4e7eb
--nut-pagination-active-background-colorlinear-gradient(135deg,var(--nut-primary-color) 0%,var(--nut-primary-color-end) 100%)
--nut-pagination-disable-colorrgba(116, 116, 116, 0.31)
--nut-pagination-disable-background-color#f7f8fa
--nut-pagination-item-border-width1px
--nut-pagination-item-border-radius2px
--nut-pagination-prev-next-padding0 11px

MIT Licensed