Skip to content
API 风格:

Постраничная навигация ​

Навигация по страницам: предыдущая страница / номера страниц / следующая страница / пропуски / переключение размера страницы / переход на страницу / общее количество. Алгоритм сворачивания окна номеров страниц реализован как чистая функция в core-слое и покрывается исчерпывающими unit-тестами.

Базовое использование ​

Базовое использование
vue
<script setup lang="ts">
</script>

<template>
  <LhPagination :total="120" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhPagination :total="120" />
</template>

Общее количество и переключение размера страницы ​

Общее количество и переключение размера страницы
vue
<script setup lang="ts">
</script>

<template>
  <LhPagination :total="480" show-total show-size-changer />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhPagination :total="480" show-total show-size-changer />
</template>

Переход на страницу ​

Переход на страницу
vue
<script setup lang="ts">
</script>

<template>
  <LhPagination :total="480" show-total show-jumper />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhPagination :total="480" show-total show-jumper />
</template>

Компактный режим ​

Компактный режим
vue
<script setup lang="ts">
</script>

<template>
  <LhPagination :total="480" simple show-jumper />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhPagination :total="480" simple show-jumper />
</template>

Контролируемое использование ​

Контролируемое использование

Текущая страница: 2

vue
<script setup lang="ts">
import { ref } from 'vue'
const page = ref(2)
const pageSize = ref(20)
</script>

<template>
  <LhPagination v-model:current="page" :total="95" />
</template>
vue
<script>
export default {
  data() {
    return { page: 2, pageSize: 20 }
  },
}
</script>

<template>
  <LhPagination v-model:current="page" :total="95" />
</template>

Размер страницы и отключение ​

v-model:page-size контролирует размер страницы, page-sizes задаёт варианты; disabled отключает всю постраничную навигацию.

Размер страницы и отключение

Размер страницы: 20

vue
<script setup lang="ts">
import { ref } from 'vue'
const pageSize = ref(20)
</script>

<template>
  <LhPagination
    v-model:page-size="pageSize"
    :total="480"
    show-size-changer
    :page-sizes="[10, 20, 50, 100]"
  />
  <LhPagination :total="480" disabled />
</template>
vue
<script>
export default {
  data() {
    return { pageSize: 20 }
  },
}
</script>

<template>
  <LhPagination
    v-model:page-size="pageSize"
    :total="480"
    show-size-changer
    :page-sizes="[10, 20, 50, 100]"
  />
  <LhPagination :total="480" disabled />
</template>

Pagination API ​

Props ​

СвойствоОписаниеТипПо умолчанию
totalОбщее количество данных (обязательный)number—
pageSizeРазмер страницыnumber10
currentТекущая страница (v-model:current)number—
pageSizesВарианты размера страницыnumber[]() => [10, 20, 30, 40]
showTotalПоказывать ли общее количествоbooleanfalse
showSizeChangerПоказывать ли переключатель размера страницыbooleanfalse
showJumperПоказывать ли поле перехода на страницуbooleanfalse
simpleКомпактный режимbooleanfalse
disabledОтключёнbooleanfalse
sxСвойства быстрой разметки sxLhSxProps—

Events ​

СобытиеОписаниеПараметры обратного вызова
update:currentИзменение текущей страницы (v-model)(page: number)
update:pageSizeИзменение размера страницы (v-model:pageSize)(size: number)
changeИзменение номера страницы(page: number)
size-changeИзменение размера страницы(size: number)

Доступность ​

  • Корневой элемент — <nav aria-label="pagination">
  • Кнопка текущей страницы автоматически получает aria-current="page"
  • У каждой кнопки номера страницы, а также у кнопок предыдущей/следующей страницы есть собственный aria-label (из языкового пакета pagination.page / prev / next), чистые символы «‹» и «›» скрыты через aria-hidden
  • Поле перехода на страницу сопровождается настоящим <label> (из языкового пакета pagination.goto)
  • Переключатель размера страницы — нативный <select> с aria-label (из языкового пакета pagination.sizeChangerLabel)
  • Пропуски — исключительно декоративные элементы с aria-hidden, не мешающие клавиатурной навигации

Определения типов ​

Структуры TypeScript, экспортируемые этим компонентом (автоматически извлечены из packages/components/pagination/src/types.ts и исходников @lh-ui/share/core/*; нажмите на каждый пункт, чтобы развернуть полное определение; описания свойств см. в таблице Props выше):

LhPaginationProps
ts
export interface LhPaginationProps {
  /** Общее количество данных (обязательный) */
  total: number
  /** Размер страницы */
  pageSize?: number
  /** Текущая страница (v-model:current) */
  current?: number
  /** Варианты размера страницы */
  pageSizes?: number[]
  /** Показывать ли общее количество */
  showTotal?: boolean
  /** Показывать ли переключатель размера страницы */
  showSizeChanger?: boolean
  /** Показывать ли поле перехода на страницу */
  showJumper?: boolean
  /** Компактный режим */
  simple?: boolean
  /** Отключён */
  disabled?: boolean
  /** Свойства быстрой разметки sx */
  sx?: LhSxProps
}

Красота традиций — основа кода