Vue2.0 分頁組件

分頁組件:
** 功能:點(diǎn)擊頁面序號可以跳轉(zhuǎn)到相應(yīng)頁面。點(diǎn)擊上一頁或者下一頁,當(dāng)頁面在第一頁時候上一頁無法點(diǎn)擊,頁面在最后一頁時候下一頁無法點(diǎn)擊。一次顯示當(dāng)前頁面的前兩頁和后兩頁。當(dāng)當(dāng)前頁面和第一頁和最后一頁相差三個以上時候出現(xiàn)省略號。始終顯示第一頁和最后一頁,只有一頁的時候顯示一頁。**

Image.png
Image.png
Image.png

代碼如下:
<template>

<div class="pager">
    <button class="btn btn-pager" :disabled="propsData.pageNum == 1" @click="prePage">上一頁</button>
    <span  :class="['page-index',{activ:1 == propsData.pageNum}] " @click="goPage(1)">1</span>
    <span v-if="preClipped" class="page-index">...</span>
    <span v-for="index in pages" :class="['page-index',{activ:index == propsData.pageNum}] " @click="goPage(index)">{{index}}</span>
    <span v-if="backClipped" class="page-index">...</span>
    <span :class="['page-index',{activ:propsData.pages == propsData.pageNum}] " @click="goPage(propsData.pages)">{{propsData.pages}}</span>
    <button class="btn btn-pager" :disabled="propsData.pageNum == propsData.pages" @click="nextPage">下一頁</button>
</div>

</template>
<script type="text/javascript">
export default{
props:['propsData'],
data:function(){
return {
backClipped: true,
preClipped: false
}
},
watch:{
"currentPage" : function(page) {
this.$emit('page-to', page);
},
deep:true
},
methods:{
prePage:function(){
this.propsData.pageNum--
},
nextPage:function(){
this.propsData.pageNum++
},
goPage (index) {
// 跳轉(zhuǎn)到相應(yīng)頁面
if (index !== this.propsData.pageNum) {
this.propsData.pageNum = index
}
}
},
computed:{
// 使用計算屬性來得到每次應(yīng)該顯示的頁碼
pages: function () {
let ret = []
if (this.propsData.pageNum > 3) {
// 當(dāng)前頁碼大于三時,顯示當(dāng)前頁碼的前2個
ret.push(this.propsData.pageNum - 2)
ret.push(this.propsData.pageNum - 1)
if (this.propsData.pageNum > 4) {
// 當(dāng)前頁與第一頁差距4以上時顯示省略號
this.preClipped = true
}
} else {
this.preClipped = false
for (let i = 2; i < this.propsData.pageNum; i++) {
ret.push(i)
}
}
if (this.propsData.pageNum !== this.propsData.pages && this.propsData.pageNum !== 1) {
ret.push(this.propsData.pageNum)
}
if (this.propsData.pageNum < (this.propsData.pages - 2)) {
// 顯示當(dāng)前頁碼的后2個
ret.push(this.propsData.pageNum + 1)
ret.push(this.propsData.pageNum + 2)
if (this.propsData.pageNum <= (this.propsData.pages - 3)) {
// 當(dāng)前頁與最后一頁差距3以上時顯示省略號
this.backClipped = true
}
} else {
this.backClipped = false
for (let i = (this.propsData.pageNum + 1); i < this.propsData.pages; i++) {
ret.push(i)
}
}
// 返回整個頁碼組
return ret
}
}

}

</script>

父組件中如何引用:
<pagation :propsData="pageData" @page-to="loadList"></pagation>
<script>
import pagation from './test'
export default{
data(){
return {
pageData:{
pages : '', //總頁數(shù)
navigatePages : 8, //顯示的導(dǎo)航頁個數(shù)
pageSize : 1, //每頁最多顯示的行數(shù)
pageNum : 1 //當(dāng)前頁
},
};
},
watch:{
'pageData.pageNum':'loadList'
},
components:{
'pagation':pagation
},
methods:{
loadList: function(){
//ajax 請求數(shù)據(jù)
}
},
mounted:function(){
this.loadList();
}
}
</script>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 單例模式 適用場景:可能會在場景中使用到對象,但只有一個實(shí)例,加載時并不主動創(chuàng)建,需要時才創(chuàng)建 最常見的單例模式,...
    Obeing閱讀 2,314評論 1 10
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 8,122評論 2 17
  • (以下使用ssm+jsp實(shí)現(xiàn)顯示所有電影為例子) 1.封裝一個PageBean類 package com.enti...
    何文杰啊閱讀 3,944評論 0 0
  • 1.__filename代表當(dāng)前文件被解析之后的絕對路徑。2.exports和module.exports區(qū)別: ...
    四月天__閱讀 259評論 0 0
  • 文玩界避暑神器,你知道幾個? 現(xiàn)在已經(jīng)初夏了,天氣越來越熱,也越來越容易上火,越來越容易暴脾氣,文玩里有沒有可以靜...
    夢狐先生閱讀 774評論 0 0

友情鏈接更多精彩內(nèi)容