# Pagination

Generic pagination control, handles all the pagination logic

# State

The usePagination function exposes the following reactive state:

import { usePagination } from "vue-composable";

const { pageSize, total, currentPage, offset, lastPage } = usePagination();
State Type Description
pageSize Number Current page size, allows to set the pageSize
total Number Total elements
currentPage Number Current page
offset Number Current page offset from the beginning
lastPage Number Last page number

# Methods

The usePagination function exposes the following methods:

import { usePagination } from "vue-composable";

const { next, prev, first, last } = usePagination();
Signature Description
next() Increments currentPage
prev() Decrements currentPage
first() Sets currentPage to 1
last() Sets currentPage = lastPage

# Example

page 1 of 10

  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

# Code

Array pagination

<template>
  <div>
    <p>page {{ currentPage }} of {{ lastPage }}</p>
    <p>
      <button @click="prev">prev</button>
      <button @click="next">next</button>
    </p>
    <ul>
      <li v-for="n in result" :key="n">{{ n }}</li>
    </ul>
  </div>
</template>

<script>
import { reactive, ref, computed } from "@vue/composition-api";
import { usePagination } from "vue-composable";

export default {
  name: "pagination-example",
  setup() {
    const arrayRef = ref(new Array(100).fill(1).map((_, i) => i));
    // paginate array
    const {
      currentPage,
      lastPage,
      next,
      prev,
      offset,
      pageSize
    } = usePagination({
      currentPage: 1,
      pageSize: 10,
      total: computed(() => arrayRef.value.length)
    });

    const result = computed(() => {
      const array = arrayRef.value;
      if (!Array.isArray(array)) return [];
      return array.slice(offset.value, offset.value + pageSize.value);
    });

    return {
      currentPage,
      lastPage,
      next,
      prev,
      result
    };
  }
};
</script>