本篇文章為大家展示了使用vue怎么實(shí)現(xiàn)一個分頁組功能,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

文件的目錄:

我們在 pageComponentsTest.vue 頁面引入了 pageComponent.vue 分頁組件。整體思路是通過 props
來達(dá)到組件的靈活通用的效果,整體語法是使用vue的VM語法。
pageComponent.vue實(shí)現(xiàn)
首先實(shí)現(xiàn)一個分頁,需要知道數(shù)據(jù)總條數(shù),一個頁面顯示的數(shù)據(jù)條數(shù)和當(dāng)前顯示第幾頁的數(shù)據(jù)。那么我們在 pageComponent.vue 里面的 props 就有了。看下面的代碼:
props: {
// 分頁配置
pageConfig: {
type: Object, require: true, default() {
return {
pageSize: 10, //一頁的數(shù)據(jù)條數(shù)
pageNo: 0, //當(dāng)前頁的索引
total: 0, //總的數(shù)據(jù)條數(shù)
pageTotal: 0 //總的頁數(shù)
}
}
}根據(jù)用戶入?yún)ⅲ覀兛梢允褂糜嬎銓傩詠碛嬎阋粋€總頁數(shù)的變量:
computed: {
//計算總頁數(shù),如果傳了pageTotal,直接取pageTotal的值,如果傳了total,那么根據(jù)pageSize去計算
pageTotal(){
const config = this.pageConfig
if(config.pageTotal){
return config.pageTotal
}else {
if(config.pageSize && config.total){
return Math.ceil(config.total/config.pageSize)
}else {
return 0
}
}
}
}有了總頁數(shù),和當(dāng)前頁,就需要各種判斷來實(shí)現(xiàn)我們的html部分了,這里分4中情況
總頁數(shù)小于8,只需要直接遍歷到8就行了。
總頁數(shù)大于8,但當(dāng)前頁小于4的。
總頁數(shù)大于8,當(dāng)前頁靠后的。
總頁數(shù)大于8,當(dāng)前頁在中間的。
下面看具體的實(shí)現(xiàn):
<!--上一頁-->
<button @click="prePage" :disabled="currentPage === 1">上一頁</button>
<!--總頁數(shù)小于8的-->
<template v-if="pageTotal <= showPageNo">
<button v-for="i in pageTotal" @click="changeCurrentPage(i)" :class="{active:i === currentPage}" :key="i">{{i}}</button>
</template>
<template v-else-if="currentPage < 4">
<button v-for="i in 6" @click="changeCurrentPage(i)" :class="{active:i === currentPage}" :key="i">{{i}}</button>
<button :disabled="true">···</button>
<button>{{pageTotal}}</button>
</template>
<template v-else-if="currentPage > pageTotal - 4">
<button>1</button>
<button :disabled="true">···</button>
<button v-for="i in 6" @click="changeCurrentPage(i + (pageTotal - 6))" :class="{active:(i + (pageTotal - 6)) === currentPage}" :key="i">{{i + (pageTotal - 6)}}</button>
</template>
<template v-else>
<button>1</button>
<button :disabled="true">···</button>
<button @click="changeCurrentPage(currentPage - 2)">{{currentPage - 2}}</button>
<button @click="changeCurrentPage(currentPage - 1)">{{currentPage - 1}}</button>
<button class="active">{{currentPage}}</button>
<button @click="changeCurrentPage(currentPage + 1)">{{currentPage + 1}}</button>
<button @click="changeCurrentPage(currentPage + 2)">{{currentPage + 2}}</button>
<button :disabled="true">···</button>
<button @click="changeCurrentPage(pageTotal)">{{pageTotal}}</button>
</template>
<!--下一頁-->
<button @click="nextPage" :disabled="currentPage === pageTotal">下一頁</button>可以看到頁面上需要實(shí)現(xiàn)3個方法,分別是上下頁,和點(diǎn)擊頁面的方法。
methods: {
prePage(){
this.currentPage -= 1
this.$emit('changeCurrentPage',this.currentPage)
},
nextPage(){
this.currentPage += 1
this.$emit('changeCurrentPage',this.currentPage)
},
changeCurrentPage(i){
this.currentPage = i
this.$emit('changeCurrentPage',this.currentPage)
}
}以上就是 pageComponent.vue 的大致實(shí)現(xiàn)了,每次頁面改變,都會觸發(fā)一個 changeCurrentPage 方法的回調(diào),用來通知當(dāng)前使用組件的頁面當(dāng)前頁已經(jīng)改變。
pageComponentsTest.vue的實(shí)現(xiàn)
引用頁面就比較簡單了,只要傳入組件需要的對應(yīng)的參數(shù),就能顯示我們的組件了。 引用部分:
<template> <div class="pageComponentsTest"> <page-component :page-config="pageConfigTotal" @changeCurrentPage="changePage"></page-component> <page-component :page-config="pageConfigPageTotal"></page-component> </div> </template>
配合入?yún)⒉糠郑?/p>
{
name: "pageComponentsTest",
data() {
return {
pageConfigTotal:{total:21,pageSize:10,pageNo:1},
pageConfigPageTotal:{total:21,pageSize:10,pageNo:1,pageTotal:50}
}
},
components:{'page-component':pageComponent},
methods: {
changePage(page){
this.pageConfigTotal.pageNo = page
}
}
}上述內(nèi)容就是使用vue怎么實(shí)現(xiàn)一個分頁組功能,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站欄目:使用vue怎么實(shí)現(xiàn)一個分頁組功能-創(chuàng)新互聯(lián)
當(dāng)前地址:http://www.yijiale78.com/article20/phhjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站營銷、網(wǎng)頁設(shè)計公司、網(wǎng)站設(shè)計公司、Google、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容