1.0.0 • Published 2 years ago

vue3-basic-pagination v1.0.0

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
2 years ago

vue3-plain-pagination

NPM

NPM version tests codecov License

vue javascript vitejs rollup

Simple pagination component for Vue3 / Nuxt3. Can be easily customized via css and/or slots.

Installation

NPM

Install the npm package.

$ npm install vue3-basic-pagination --save

Register as plugin So there is no need to import it every time.

// main.js or main.ts
import { createApp } from 'vue'
import App from './App.vue'
import PaginationPlugin from 'vue3-basic-pagination' // import component
import 'vue3-basic-pagination/styles' // register default styles

const app = createApp(App)
app.use(PaginationPlugin) // register plugin
app.mount('#app')

As component

// CustomComponent.vue
import PaginationPlugin from 'vue3-basic-pagination'

Usage

In Vue Template

Basic Usage

<basic-pagination :page-count="20" />

Or

<BasicPagination :pageCount="20" />

Props

NameTypeDefaultDescription
page-count (required)NumberTotal pages.
page-rangeNumber5Range of pages which displayed.
margin-pagesNumber1The number of displayed pages for margins.
show-first-last-buttonsBooleantrueWhether to show or hide buttons to navigate to first and last pages.
show-prev-next-buttonsBooleantrueWhether to show or hide buttons to navigate to previous and next pages.
container-classstringvue3-basic-paginationCSS class name for the layout.
page-classstringpage-itemCSS class name for tag li of each page element.
page-link-classstringpage-linkCSS class name for tag span of each page element.
disabled-classstringdisabled-itemCSS class name for tag li of disabled element(s).
first-item-classstringfirst-itemCSS class name for tag li of first element.
first-item-link-classstringfirst-linkCSS class name for tag span of first element.
last-item-classstringlast-itemCSS class name for tag li of last element.
last-item-link-classstringlast-linkCSS class name for tag span of last element.
prev-item-classstringprev-itemCSS class name for tag li of previous element.
prev-item-link-classstringprev-linkCSS class name for tag span of previous element.
next-item-classstringnext-itemCSS class name for tag li of next element.
next-item-link-classstringnext-linkCSS class name for tag span of next element.
break-view-classstringbreak-itemCSS class name for tag li of break element.
break-view-link-classstringbreak-linkCSS class name for tag span of break element.
active-classstringactive-itemCSS class name for tag li of active element.

Using props

<template>
  <BasicPagination
    :page-count="20"
    :page-range="5"
    :margin-pages="3"
    :container-class="'custom-container-class'"
  >
  </BasicPagination>
</template>

<script setup lang="ts">
import { useRoute, useRouter } from 'vue-router'
// import PaginationPlugin from 'vue3-basic-pagination' // uncomment if not registered as plugin

const route = useRoute()
const router = useRouter()

const customFunc = (pageIndex: number): void => {
  const query = { ...route.query, ...{ page: pageIndex } }
  router.push({ name: '', query: query })
}
</script>

Events

NameReturn TypeDescription
page-selectedNumberSelected page number.

Using events

<template>
  <BasicPagination
    :page-count="20"
    @pageSelected="customFunc"
  >
  </BasicPagination>
</template>

<script setup lang="ts">
import { useRoute, useRouter } from 'vue-router'
// import PaginationPlugin from 'vue3-basic-pagination' // uncomment if not registered as plugin

const route = useRoute()
const router = useRouter()

const customFunc = (pageIndex: number): void => {
  const query = { ...route.query, ...{ page: pageIndex } }
  router.push({ name: '', query: query })
}
</script>

Slots

NameDescription
firstButtonContentContent of first page item.
lastButtonContentContent of last page item.
prevButtonContentContent of prev page item.
nextButtonContentContent of next page item.
pageContentContent of page item.
currentPageContentContent of current page item.
breakViewContentContent of break item.

Using slots

<BasicPagination
  :page-count="7"
>
  <template v-slot:firstButtonContent>
    <router-link :to="{ path: '' }">
      F I R S T
    </router-link>
  </template>
  <template v-slot:prevButtonContent="slotProps">
    <router-link :to="{ name: '', query: { page: slotProps.pageNumber } }">
      P R E V
    </router-link>
  </template>
  <template v-slot:breakViewContent>
    ---
  </template>
  <template v-slot:pageContent="slotProps">
    <router-link :to="{ name: '', query: { page: slotProps.pageNumber } }">
      p {{ slotProps.pageNumber }}
    </router-link>
  </template>
  <template v-slot:currentPageContent="slotProps">
    &gt;&gt; {{ slotProps.pageNumber }} &lt;&lt;
  </template>
  <template v-slot:nextButtonContent="slotProps">
    <router-link :to="{ name: '', query: { page: slotProps.pageNumber } }">
      N E X T
    </router-link>
  </template>
  <template v-slot:lastButtonContent="slotProps">
    <router-link :to="{ name: '', query: { page: slotProps.pageNumber } }">
      L A S T
    </router-link>
  </template>
</BasicPagination>
1.0.0

2 years ago

0.0.18

2 years ago

0.0.17

2 years ago

0.0.16

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago