vue pagination組件

效果

  • 首頁
  • 第二頁
  • 第五頁
  • 最後一頁

樣式由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)">&laquo;</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)">&raquo;</span><li>
        <li class="page-item"><span class="page-link" v-on:click="jumpTo(pageCount-1)">{{pageCount}}</span><li>
    </ul>
    `
})

usage

html

<pagination :limit="itemLimit" :total="itemCount" :index="currentIndex" v-on:jump="jumpTo"></pagination>

app

methods:{
    jumpTo:function(index){
          this.pageJumpTo(index);  
    },
}

總結

total 參數是記錄未分頁前的全部item數量。監聽 jump 事件可獲取組件頁面跳轉目標頁數。html

後臺處理的頁碼是0~n,而前端顯示是1~n+1,主要是爲了後端交互方便。前端

相關文章
相關標籤/搜索