樣式由bootstrap提供javascript
Vue.component('pagination',{ data(){ return { pageCount:0,pageRange:[0], }; }, props:[ 'total','index','limit','pagerang' ], methods:{ jumpTo:function(val){ if (this.pageCount >0 && val >= this.pageCount || val < 0 || this.index == val){ return } this.index = val; this.$emit('jump',val); }, getPageRange:function() { if (this.pageCount<6){ this.pageRange = [...Array(this.pageCount).keys()]; return } let start = 0; if (this.index > this.pageCount-4){ start = this.pageCount - 5; }else if (this.index < 2){ start = 0; }else{ start = this.index -2; } this.pageRange = new Array(5); for (let i=0;i<5;i++){ this.pageRange[i] = start +i; } } }, watch:{ total:function(val) { this.pageCount = Math.ceil(this.total/this.limit); this.getPageRange(); }, limit:function(val){ this.pageCount = Math.ceil(this.total/this.limit); this.getPageRange(); }, index:function(val){ this.getPageRange(); } }, template:` <ul class="pagination" style="margin-top: 0%;float: right;" v-if="pageCount>0"> <li class="page-item"><span class="page-link" v-on:click="jumpTo(0)">1</span><li> <li class="page-item"><span class="page-link" v-on:click="jumpTo(index-1)">«</span><li> <li class="page-item" v-for="i in pageRange" v-bind:class="{active: index==i}"><span class="page-link" v-on:click="jumpTo(i)">{{i + 1}}</span><li> <li class="page-item"><span class="page-link" v-on:click="jumpTo(index+1)">»</span><li> <li class="page-item"><span class="page-link" v-on:click="jumpTo(pageCount-1)">{{pageCount}}</span><li> </ul> ` })
<pagination :limit="itemLimit" :total="itemCount" :index="currentIndex" v-on:jump="jumpTo"></pagination>
methods:{ jumpTo:function(index){ this.pageJumpTo(index); }, }
total 參數是記錄未分頁前的全部item數量。監聽 jump 事件可獲取組件頁面跳轉目標頁數。html
後臺處理的頁碼是0~n,而前端顯示是1~n+1,主要是爲了後端交互方便。前端