您好,登錄后才能下訂單哦!
這篇文章主要介紹“Vue3.x+Element Plus如何實現分頁器組件”,在日常操作中,相信很多人在Vue3.x+Element Plus如何實現分頁器組件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Vue3.x+Element Plus如何實現分頁器組件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
開發中難免會遇到寬度很窄的列表需要使用分頁器的情況,這時若使用Element Plus組件的分頁器會導致分頁器內容超出展示的區域,而Element Plus組件中目前沒有Acro Design那樣小巧的分頁器(Arco Design Vue)如下圖所示,如果再引入一個新的UI組件庫未免導致項目臃腫,所以基于Vue3.x和Element Plus封裝了一個即拿即用的”簡潔模式“分頁器組件以便不時之需
分頁器組件代碼部分:
<!-- (簡潔模式)分頁器組件 --> <template> <div class="smallpagination"> <!-- 總數統計 --> <span>{{ '共' + total + '條' }}</span> <!-- 翻頁 --> <div class="smallpagination-pager"> <!-- 左翻頁 --> <el-icon @click="pageTurning('down')" :class="curPage <= 1 ? 'forbid-pageturning' : ''"> <ArrowLeft /> </el-icon> <!-- 頁碼 --> <el-input-number @change="handlePageChange" v-model="pageNum" :min="1" :max="pageTotal" :step-strictly="true" :controls="false" /> <b>{{ '/ ' + pageTotal }}</b> <!-- 右翻頁 --> <el-icon @click="pageTurning('up')" :class="curPage >= pageTotal ? 'forbid-pageturning' : ''"> <ArrowRight /> </el-icon> </div> </div> </template> <script setup> import { useAttrs, computed, ref } from 'vue'; import { ArrowLeft, ArrowRight } from '@element-plus/icons-vue'; // 接收父組件參數 const attrs = useAttrs(); // 父組件事件 const em = defineEmits(['handlePageChange']); // 當前頁 const pageNum = ref(1); // 父組件傳遞-當前頁碼 const curPage = computed(() => { pageNum.value = attrs.curPage; return attrs.curPage; }); // 父組件傳遞-總數 const total = computed(() => { return attrs.total; }); // 總頁碼數 const pageTotal = computed(() => { return attrs.total > 0 ? Math.ceil(attrs.total / attrs.pageSize) : 1; }); /* 改變頁碼 */ const handlePageChange = (e) => { if (pageTotal.value <= 1) { return; } em('handlePageChange', e); }; /* 翻頁 */ const pageTurning = (type) => { // 向前翻頁 if (type === 'up') { if (curPage.value >= pageTotal.value || pageTotal.value <= 1) { return; } em('handlePageChange', pageNum.value + 1); } // 向后翻頁 else { if (pageTotal.value <= 1 || curPage.value <= 1) { return; } em('handlePageChange', pageNum.value - 1); } }; </script> <style lang="less" scoped> .smallpagination { width: auto; height: 100%; display: flex; align-items: center; >span { margin-right: 11px; font-size: 14px; font-weight: 400; color: #4E5969; line-height: 21px; } .smallpagination-pager { display: flex; align-items: center; .el-icon { width: 30px; height: 30px; font-size: 14px; color: #4E5969; cursor: pointer; &:hover { background: rgb(247, 248, 250); color: #0082ff; } } .forbid-pageturning { opacity: 0.4; cursor: not-allowed; &:active { color: #4E5969; background: rgb(255, 255, 255); } } >b { margin: 0 5px; font-size: 14px; font-weight: 400; color: #4E5969; } } } </style> <style lang="less"> .smallpagination { .smallpagination-pager { .el-input-number { width: 40px; margin-left: 5px; span { display: none; } .el-input__wrapper { padding: 0; height: 30px; font-size: 14px; box-sizing: border-box; background: #f2f3f5; box-shadow: none !important; } } } } </style>
使用簡潔模式分頁器組件代碼如下:
<template> <div class="xxx-list"> ... <div class="list-bottom-common-page"> <SmallPagination :total="total" :curPage="curPage" :pageSize="pageSize" @handlePageChange="handleCurrentChange"> </SmallPagination> </div> </div> </template> <script setup> import SmallPagination from '@/components/xxx/SmallPagination.vue'; import { ref } from 'vue'; // 當前頁 const curPage = ref(1); // 每頁條數 const pageSize = ref(20); // 列表總數 const total = ref(0); /* 當前頁改變 */ const handleCurrentChange = (val) => { curPage.value = val; ... }; </script>
最終效果如下:
到此,關于“Vue3.x+Element Plus如何實現分頁器組件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。