Обзор
<b-pagination-nav>
– это настраиваемый компонент ввода, обеспечивающий разбиение на страницы навигации. Общее количество страниц, заданное свойством number-of-pages
. Номера страниц индексируются от 1 до number-of-pages
.
b-pagination-nav
попытается автоматически определить, какая ссылка страницы является активной кнопкой страницы, на основе URL-адреса текущей страницы (либо с помощью обнаружения $route
, либо, если $router
не обнаружен, URL-адрес местоположения браузера).
Примечание: <b-pagination-nav>
используется для перехода к новым URL-адресам страниц. Для управления нумерацией страниц компонентов страницы (например, нумерация таблиц или списков) вместо этого используйте компонент <b-pagination>
.
<template>
<div class="overflow-auto">
<b-pagination-nav :link-gen="linkGen" :number-of-pages="10" use-router></b-pagination-nav>
</div>
</template>
<script>
export default {
methods: {
linkGen(pageNum) {
return pageNum === 1 ? '?' : `?page=${pageNum}`
}
}
}
</script>
Ссылка на страницу и генерация номера
По умолчанию <b-pagination-nav>
генерирует простые теги ссылок, устанавливая для атрибута HREF значение base-url
, связанное с номером страницы. Свойство base-url
по умолчанию имеет значение /
. Количество страниц указывается с помощью свойства number-of-pages
. Страницы — это числа от 1
до number-of-pages
.
Ссылки роутера
Чтобы сгенерировать ссылки на страницы в виде компонентов <router link>
(или <nuxt-link>
, если обнаружен Nuxt.js), установите свойство use-router
. Затем HREF станет свойством to
ссылки маршрутизатора. Или, при желании, используйте функцию генератора ссылок, чтобы вернуть объект to
location.
Если в вашем приложении не обнаружен $router
, <b-pagination-nav>
будет использовать обычные элементы <a>
, а любой объект местоположения to
будет преобразован в стандартный URL-адрес (если возможно).
Поддерживаются следующие свойства ссылок маршрутизатора:
active-class
exact
exact-active-class
prefetch
(<nuxt-link>
специфическое свойство) no-prefetch
(<nuxt-link>
специфическое свойство)
Для получения подробной информации о вышеуказанных свойствах обратитесь к справочному разделу Поддержка Router Link.
Функция генератора ссылок
Если вам нужен более тонкий контроль над сгенерированными URL-адресами ссылок или свойствами <router-link>
и to
, вы можете установить свойство link-gen
на ссылку на функцию, которая получает два аргумента: номер страницы и объект. содержит два поля (link
и page
), где page
— это номер страницы, а link
— это внутренняя ссылка.
Функция link-gen
должна возвращать либо строку (для HREF), либо объект маршрутизатора to
. Если возвращаемое значение является объектом, то всегда будет генерироваться маршрутизатор-ссылка (если обнаружен $router
). Если возвращаемое значение является строкой, по умолчанию генерируется стандартная ссылка, если только не задан параметр use-router
. Если используется объект местоположения to
, то свойство base-url
не будет иметь никакого эффекта.
export default {
methods: {
linkGen(pageNum) {
return `/foo/page/${pageNum}`
},
linkGen(pageNum) {
return { path: `/foo/page/${pageNum}` }
},
linkGen(pageNum) {
return {
path: '/foo/',
query: { page: pageNum }
}
},
linkGen(pageNum) {
return {
name: 'posts',
params: { post: pageNum }
}
}
}
}
Примечание: При возврате от объекта местоположения to
к стандартной ссылке (когда нет доступного $router
), для создания URL-адреса используются только следующие свойства местоположения:
path
(если не указан, по умолчанию используется текущий URL-адрес страницы) query
hash
(должен включать #
в начале, если используется)
Преобразование маршрутов name
и params
не поддерживается.
Генерация номера страницы
По умолчанию <b-pagination-nav>
отображает номера страниц (1-N) в кнопках ссылок на страницы. Вы можете переопределить это поведение, указав ссылку на функцию для свойства page-gen
. Ссылка на функцию должна принимать единственный аргумент, который является номером страницы (1-N). Функция page-gen
должна возвращать строку.
Примечание: Содержимое HTML в сгенерированных строках номеров страниц не поддерживается. Для базового HTML вы можете использовать область действия page
для более тонкого форматирования.
Пример: использование массива ссылок для создания пагинации:
<template>
<div class="overflow-auto">
<b-pagination-nav
:link-gen="linkGen"
:page-gen="pageGen"
:number-of-pages="links.length"
></b-pagination-nav>
</div>
</template>
<script>
export default {
data() {
return {
links: ['#foo', '#bar', '#baz', '#faz']
}
},
methods: {
linkGen(pageNum) {
return this.links[pageNum - 1]
},
pageGen(pageNum) {
return this.links[pageNum - 1].slice(1)
}
}
}
</script>
Предоставление массива страниц
Вместо того, чтобы использовать number-of-pages
для автоматического создания ссылок на страницы, вы можете передать массив ссылок через свойство pages
. Когда свойство pages
имеет массив длины 1
или больше, он будет использоваться для генерации ссылок на страницы.
Массив может быть одного из двух форматов:
- Массив строк, где каждая запись является ссылкой. в этом режиме номера кнопок страниц будут автоматически установлены от
1
до количества записей в массиве. - Массив объектов, где каждый объект имеет два поля:
link
(обязательно) и text
(необязательно). Ссылка может быть либо строкой, указывающей ссылку, либо объектом местоположения to
. text
будет содержимым кнопок ссылок на страницы. Если text
не указан, по умолчанию содержимое кнопки страницы будет содержать номер страницы.
Когда предоставлена строковая ссылка, <b-pagination-nav>
будет использовать обычные элементы <a>
, если только не установлено свойство use-router
. Когда ссылка (в форме массива объектов) является объектом местоположения to
, тогда ссылка на маршрутизатор будет автоматически сгенерирована (если обнаружен $router
).
В формате массива строки ссылок (и/или объекты местоположения) используются как есть, а свойство base-url
будет игнорироваться.
<template>
<b-pagination-nav :pages="pages1" use-router></b-pagination-nav>
<b-pagination-nav :pages="pages2" use-router></b-pagination-nav>
<b-pagination-nav :pages="pages3" use-router></b-pagination-nav>
</template>
<script>
export default {
data() {
return {
pages1: ['?page=1', '?page=2', '?page=3'],
pages2: [
{ link: '?page=1', text: 'One' },
{ link: '?page=2', text: 'Two' },
{ link: '?page=3', text: 'Three' }
],
pages3: [
{ link: { query: { page: 1 } }, text: 'Page 1' },
{ link: { query: { page: 2 } }, text: 'Page 2' },
{ link: { query: { page: 3 } }, text: 'Page 3' }
]
}
}
}
</script>
Настройка внешнего вида
Ограничение количества отображаемых кнопок
Чтобы ограничить количество отображаемых кнопок страницы (включая многоточие, но исключая первую, предыдущую, следующую и последнюю кнопки), используйте свойство limit
, чтобы указать желаемое количество кнопок страницы (включая многоточие, если оно показано). Ограничение limit
по умолчанию равно 5
. Минимальное поддерживаемое значение — 3
. Когда для limit
установлено значение 3
, для практических целей индикаторы с многоточием отображаться не будут.
Кнопки first
и last
могут быть дополнительно скрыты, установив свойство hide-goto-end-buttons
.
Отображение ellipsis
можно отключить, установив свойство hide-ellipsis
.
Поддержка маленького экрана
На небольших экранах (например, мобильных) некоторые из кнопок <b-pagination>
будут скрыты, чтобы свести к минимуму возможность переноса интерфейса на несколько строк:
- Индикаторы многоточия будут скрыты на экранах
xs
и меньше. - Кнопки с номерами страниц будут ограничены максимум тремя видимыми на экранах
xs
и меньше.
Это гарантирует, что будут видны не более 3 кнопок с номерами страниц, а также кнопки перехода первая, предыдущая, следующая и последняя.
Содержимое кнопки
<b-pagination-nav>
поддерживает несколько свойств/слотов, которые позволяют настраивать внешний вид. Все свойства *-text
содержат только текст и не содержат HTML, но вы можете использовать для этого аналоги слотов с одинаковыми именами.
Полный список всех доступных слотов смотрите в разделе Слоты ниже.
<template>
<div class="overflow-auto">
<b-pagination-nav
number-of-pages="10"
base-url="#"
first-text="First"
prev-text="Prev"
next-text="Next"
last-text="Last"
></b-pagination-nav>
<b-pagination-nav
number-of-pages="10"
base-url="#"
first-text="⏮"
prev-text="⏪"
next-text="⏩"
last-text="⏭"
class="mt-4"
></b-pagination-nav>
<b-pagination-nav
number-of-pages="10"
base-url="#"
class="mt-4"
>
<template #first-text><span class="text-success">Первая</span></template>
<template #prev-text><span class="text-danger">Предыдущая</span></template>
<template #next-text><span class="text-warning">Следующая</span></template>
<template #last-text><span class="text-info">Последняя</span></template>
<template #ellipsis-text>
<b-spinner small type="grow"></b-spinner>
<b-spinner small type="grow"></b-spinner>
<b-spinner small type="grow"></b-spinner>
</template>
<template #page="{ page, active }">
<b v-if="active"></b>
<i v-else></i>
</template>
</b-pagination-nav>
</div>
</template>
Область действия слота page
всегда ограничена, а слоты first-text
, prev-text
, next-text
и last-text
опционально. Слот ellipsis-text
не ограничен.
Свойства переменных области, доступные для слота page
:
Свойство | Тип | Описание |
page | Number | Номер страницы (от 1 до numberOfPages ) |
index | Number | Номер страницы (индексируется от 0 до numberOfPages -1 ) |
active | Boolean | Если страница является активной страницей |
disabled | Boolean | Если кнопка страницы отключена |
content | String | Содержимое по умолчанию или результат функции page-gen |
Свойства переменных области, доступные для слота first-text
, prev-text
, next-text
и last-text
:
Свойство | Тип | Описание |
page | Number | Номер страницы (от 1 до numberOfPages ) |
index | Number | Номер страницы (индексируется от 0 до numberOfPages -1 ) |
disabled | Boolean | Если кнопка страницы отключена |
Тип кнопки перейти к первому/последнему
Если вы предпочитаете иметь кнопки с первым и последним номером страницы для перехода на соответствующую страницу, используйте свойства first-number
и last-number
props.
<template>
<div class="overflow-auto">
<div>
<h6>Перейти к первому номеру кнопки</h6>
<b-pagination-nav
v-model="currentPage"
:number-of-pages="pages"
base-url="#"
first-number
></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Перейти к последнему номеру кнопки</h6>
<b-pagination-nav
v-model="currentPage"
:number-of-pages="pages"
base-url="#"
last-number
></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Перейти к первому и последнему номеру кнопки</h6>
<b-pagination-nav
v-model="currentPage"
:number-of-pages="pages"
base-url="#"
first-number
last-number
></b-pagination-nav>
</div>
</div>
</template>
<script>
export default {
data() {
return {
pages: 100,
currentPage: 5
}
}
}
</script>
Размер кнопки
При желании измените размер кнопки по умолчанию, установив свойство size
либо на 'sm'
для кнопок меньшего размера, либо на 'lg'
для кнопок большего размера.
<template>
<div class="overflow-auto">
<div>
<h6>Маленькая</h6>
<b-pagination-nav size="sm" number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6>По умолчанию</h6>
<b-pagination-nav number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Большая</h6>
<b-pagination-nav size="lg" number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
</div>
</template>
Стиль таблетки
Легко переключайтесь на кнопки в стиле таблеток, установив свойство pills
<template>
<div class="overflow-auto">
<div>
<h6>Маленькая таблетка</h6>
<b-pagination-nav pills size="sm" number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Таблетка по умолчанию</h6>
<b-pagination-nav pills number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6>Большая таблетка</h6>
<b-pagination-nav pills size="lg" number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
</div>
</template>
Примечание: Для стиля таблетки требуется пользовательский CSS/SCSS BootstrapVue.
Выравнивание
По умолчанию компонент пагинации выравнивается по левому краю. Измените выравнивание на center
, right
(right
- это псевдоним для end
) или fill
, установив свойство align
на соответствующее значение.
<template>
<div class="overflow-auto">
<div>
<h6>Выравнивание по левому краю (по умолчанию)</h6>
<b-pagination-nav number-of-pages="10" base-url="#"></b-pagination-nav>
</div>
<div class="mt-3">
<h6 class="text-center">Выравнивание по центру</h6>
<b-pagination-nav number-of-pages="10" base-url="#" align="center"></b-pagination-nav>
</div>
<div class="mt-3">
<h6 class="text-right">Выравнивание по правому краю (концу)</h6>
<b-pagination-nav number-of-pages="10" base-url="#" align="right"></b-pagination-nav>
</div>
<div class="mt-3">
<h6 class="text-center">Выравнивание на всю ширину</h6>
<b-pagination-nav number-of-pages="10" base-url="#" align="fill"></b-pagination-nav>
</div>
</div>
</template>
Автоматическое определение текущей страницы и поддержка v-model
<b-pagination-nav>
попытается автоматически определить, какая кнопка страницы должна быть активной, на основе текущего URL-адреса страницы или $route
(если обнаружен маршрутизатор). В тех случаях, когда он не может обнаружить страницу, никакие кнопки номеров страниц не будут в активном состоянии, а первая, предыдущая, следующая и последняя кнопки будут в отключенном состоянии до тех пор, пока не будет нажата кнопка страницы.
Опционально поддерживается v-model
(обновляется событием input
и привязывается к свойству value
). Установка для v-model
значения null
(по умолчанию) первоначально вызовет автоматическое обнаружение активной страницы, а затем будет обновлен номер текущей страницы (индексируется от 1
до количества страниц). Если вы изначально установили для v-model
значение 1
или больше, автоматическое определение страницы не произойдет (пока пользователь не нажмет кнопку страницы), а страница, указанная v-model
, будет установить как active
.
Чтобы отключить автоматическое обнаружение активной страницы, установите свойство no-page-detect
в значение true
.
Примечание: Автоматическое обнаружение страниц должно перебирать все возможные ссылки на страницы, пока не будет обнаружено совпадение. Для большего number-of-pages
, эта проверка может занять некоторое время, поэтому вы можете вручную контролировать, какая страница является активной с помощью v-model
и свойства no-page-detect
.
Предотвращение выбора страницы
Вы можете прослушивать событие page-click
, которое позволяет предотвратить выбор страницы. Событие генерируется с двумя аргументами:
bvEvent
: Объект BvEvent
. ВызовитеbvEvent.preventDefault()
, чтобы отменить выбор страницы page
: Номер страницы для выбора (начиная с 1
)
Из соображений доступности при использовании события page-click
для предотвращения выбора страницы вы должны предоставить пользователю некоторые средства уведомления о том, почему страница не может быть выбрана. Рекомендуется использовать атрибут disabled
в компоненте <b-pagination-nav>
вместо использования события page-click
(поскольку disabled
более интуитивно понятен для пользователей программ чтения с экрана).
Доступность
Компонент <b-pagination-nav>
предоставляет множество функций для поддержки пользователей вспомогательных технологий, таких как атрибуты aria-
и навигация с помощью клавиатуры.
ARIA метки
<b-pagination-nav>
предоставляет различные свойства *-label-*
, которые используются для установки атрибутов aria-label
для различных элементов внутри компонента, что поможет пользователям вспомогательных технологий.
Свойство | aria-label содержимое по умолчанию |
label-first-page | "Перейти на первую страницу" |
label-prev-page | "Перейти на предыдущую страницу" |
label-next-page | "Перейти на следующую страницу" |
label-last-page | "Перейти на последнюю страницу" |
label-page | "Перейти к странице" с добавлением номера страницы |
aria-label | "Пагинация", примененная к внешнему контейнеру разбиения на страницы |
label-page
может дополнительно принимать функцию для создания aria-label. В функцию передается единственный аргумент — номер страницы (индексируется от 1 до количества страниц).
Вы можете удалить любую метку, установив свойство в пустую строку (''
), хотя это не рекомендуется, если только содержимое кнопки текстом не передает ее назначение.
Навигация с помощью клавиатуры
<b-pagination-nav>
поддерживает стандартную навигацию с помощью клавиш Tab.
Смотрите также
Обратитесь к справочной странице Поддержка маршрутизатора для конкретных свойств маршрутизатора.
Для управления нумерацией страниц компонента (например, <b-table>
) или списка страниц используйте компонент <b-pagination>
.