Before you start this tutorial, please make sure you have known how to use vue3-easy-data-table
, you can check here for the document.
First of all, we need to install and import use-vue3-easy-data-table
which provides customization related composable functions.
npm install use-vue3-easy-data-table
Demo:
Script part:
<script lang="ts" setup>
import type { Header, Item } from "vue3-easy-data-table";
import { computed, ref } from "vue";
import { mockClientItems } from "../mock";
import { usePagination } from "use-vue3-easy-data-table";
import type { UsePaginationReturn } from "use-vue3-easy-data-table";
const dataTable = ref();
const {
currentPageFirstIndex,
currentPageLastIndex,
clientItemsLength,
maxPaginationNumber,
currentPaginationNumber,
isFirstPage,
isLastPage,
nextPage,
prevPage,
updatePage,
}: UsePaginationReturn = usePagination(dataTable);
const headers: Header[] = [
{ text: "Name", value: "name" },
{ text: "Address", value: "address" },
{ text: "Height", value: "height", sortable: true },
{ text: "Weight", value: "weight", sortable: true },
{ text: "Age", value: "age", sortable: true },
{ text: "Favourite sport", value: "favouriteSport" },
{ text: "Favourite fruits", value: "favouriteFruits" },
];
const items: Item[] = mockClientItems(200);
</script>
We can see from the above that firstly we use a variable called dataTable
to obtain the reference of table DOM elements. Then we use dataTable
as a parameter of the usePagination
which is a composable function returns table footer related variables and functions:
The variables usePagination
returns are all reactive, for example, if you call the nextPage
function, then the currentPageFirstIndex
, currentPageLastIndex
and currentPaginationNumber
variables will update, so finally you can use these variables in template and write style code to customize your own table footer:
Template part:
<template>
<EasyDataTable
ref="dataTable"
:headers="headers"
:items="items"
:rows-per-page="10"
hide-footer
/>
<div class="customize-footer">
<div class="customize-index">
Now displaying: {{currentPageFirstIndex}} ~ {{currentPageLastIndex}} of {{clientItemsLength}}
</div>
<div class="customize-buttons">
<span
v-for="paginationNumber in maxPaginationNumber"
class="customize-button"
:class="{'active': paginationNumber === currentPaginationNumber}"
@click="updatePage(paginationNumber)"
>
{{paginationNumber}}
</span>
</div>
<div class="customize-pagination">
<button class="prev-page" @click="prevPage" :disabled="isFirstPage">prev page</button>
<button class="next-page" @click="nextPage" :disabled="isLastPage">next page</button>
</div>
</div>
</template>
Style part
<style scoped>
.customize-footer {
margin: 5px;
display: flex;
flex-direction: column;
align-items: center;
}
.customize-footer div {
margin: 5px;
}
.customize-button {
display: inline-block;
width: 20px;
height: 20px;
text-align: center;
border-radius: 100%;
cursor: pointer;
padding: 3px;
line-height: 20px;
}
.customize-button.active {
color: #fff;
background-color: #3db07f;
}
.customize-pagination button {
margin: 0 5px;
cursor: pointer;
}
</style>
If you are interested about vue3-easy-data-table
, please check the document here: https://hc200ok.github.io/vue3-easy-data-table-doc/
And very thankful if you can give me a Github β for supporting me, repository linkοΌhttps://github.com/HC200ok/vue3-easy-data-table/
Top comments (0)