pagination.vue 2.51 KB
<template>
  <div class="pagination" :class="class">
    <ul>

      <li>
        <a v-if="pageNo !=1" href="javascript:;" 
        @click="goPage(1)">首页</a>
        <span v-else>首页</span>

      </li>

      <li>
        <a v-if="pageNo > 1" href="javascript:;" @click="goPage(pageNo - 1)">上一页</a>
        <span v-else>上一页</span>
      </li>

      <li v-for="index in totalPages" v-show="totalPages<11">
        <a v-bind:class="{ 'active': pageNo == index + 1 }" href="javascript:;" v-if="pageNo != index + 1" @click="goPage(index + 1)">{{index + 1}}</a>
        <span v-bind:class="{ 'active': pageNo == index + 1 }" v-else>{{index + 1}}</span>
      </li>

      <li v-for="index in prevnum" v-show="totalPages>10">
          <a v-bind:class="{ 'active': pageNo == index  }" 
          href="javascript:;" v-if="pageNo != index "
           @click="goPage(index )">{{index }}</a>
          <span v-bind:class="{ 'active': pageNo == index  }" v-else>{{index }}</span>
      </li>      
      <li v-for="index in nextnum"  v-show="totalPages>10" >
          <a v-bind:class="{ 'active': pageNo == index  }" 
          href="javascript:;" v-if="pageNo != index "
           @click="goPage(index )">{{index }}</a>
          <span v-bind:class="{ 'active': pageNo == index  }" v-else>{{index }}</span>
      </li>

      
      <li>
        <a v-if="pageNo < totalPages" @click="goPage(pageNo + 1)" href="javascript:;">下一页</a>
        <span v-else>下一页</span>
      </li>
    </ul>
  </div>
</template>

<script>
  module.exports = {

    props: {
      'pageNo': {
        twoWay: true,
        type: Number,
        default: 1
      },
      'totalPages': {
        twoWay: true,
        type: Number,
        default: 0
      },
      'class': {
        type: Array,
        default: []
      }
    },
    computed:{
        prevnum:function(){
          var arr=[];
          var n=this.pageNo-1;
          if(n<=0){
            return arr
          }         
          while(n>0){
            if(arr.length<3){
              arr.unshift(n);
            }            
            n-=1;
          }
          return arr;
        },nextnum:function(){
          var arr=[];
          var n=this.pageNo;
          for(var i=0;i<4;i++){
            if(n<this.totalPages){              
              arr.push(n)
              n+=1;
            }
          }
          return arr;
        }
    },
    methods: {
      goPage: function (num) {
        this.pageNo = num;
        this.$dispatch('page-change');
      }
    }

  };
</script>