vue实现分页组件


创建pagination.vue

/* * 所需参数 * total Number 总页数 * current Number 当前页面下标 * pageSize Number 页面显示条数 * sizes Array 页面条数容器数组 * jump(index) function 重新获取数据的方法 * getPageSize(index) function 更改页面显示条数的方法 */
<style lang="less"> @color:#1199F0; .page-wrapper{ padding:20px 10px; ul{ overflow: hidden; display: table; margin: 0 auto; height: 50px; list-style: none; li{ float:left; } } .paging-size{ height:30px; margin-right:20px; select{ width:50px; height:30px; text-align:center; border:1px solid @color; } } .paging-item{ height: 30px; line-height: 30px; margin: 3px; padding-left:12px; padding-right:12px; border-radius: 5px; font-size: 12px; color: #666; cursor: pointer; &:hover,&.current{ color:#fff; background-color: @color; } } .paging-jump{ margin-left:20px; margin-top:3px; height:30px; font-size:0; overflow: hidden; input[type="number"]{ float: left; padding:0 5px; width:50px; height:28px; text-align:center; border:1px solid @color; } input[type="button"]{ float: left; padding:0 12px; height:30px; border:none; color:#fff; background-color: @color; } } } </style>
<template>
    <div class="page-wrapper">
        <ul>
            <li class="paging-size">
                <select @change="getPageSize">
                    <option v-for="i in sizes" :value="i" :selected="i==pageSize">{{i}}</option>
                </select>
            </li>
            <li class="paging-item" v-if="current!=1" @click='jump(1)'>首页</li>
            <li class="paging-item" v-if="current-1>0" @click='jump(current-1)'>上一页</li>
            <li class="paging-item" v-if="current-2>0" @click='jump(current-2)'>{{current-2}}</li>
            <li class="paging-item" v-if="current-1>0" @click='jump(current-1)'>{{current-1}}</li>
            <li class="paging-item current" @click='jump(current)'>{{current}}</li>
            <li class="paging-item" v-if="total-current>1" @click='jump(current+1)'>{{current+1}}</li>
            <li class="paging-item" v-if="total-current>2" @click='jump(current+2)'>{{current+2}}</li>
            <li class="paging-item" v-if="total-current>1" @click='jump(current+1)'>下一页</li>
            <li class="paging-item" v-if="current!=total" @click='jump(total)'>尾页</li>
            <li class="paging-jump">
                <input type="number" v-model="jumpPage" :max="total" min="0"/>
                <input type="button" value="跳转"  @click='jump(jumpPage)'/>
            </li>
        </ul>
    </div>
</template>
<script> export default { data(){ return { jumpPage:0 } }, props:{ total:Number, current:Number, pageSize:Number, sizes:{ type:Array, default:function(){ return [15,25,35] } } }, mounted(){ if(this.total-this.current>1){ this.jumpPage=this.current+1; } else{ this.jumpPage=1; } }, watch:{ current(){ if(this.total-this.current>1){ this.jumpPage=this.current+1; } else{ this.jumpPage=1; } } }, methods:{ jump(index){ index=Number(index); if (this.current != index && index > 0 && index < this.total + 1) { this.$emit('jump', index); } }, getPageSize(e){ let pageSize=Number(e.target.value); this.$emit('getPageSize',pageSize); } } } </script>

 

index.vue中注册

 components:{ 'v-pagination':(resolve)=>{ require(['components/pagination'],resolve); } }

 

index.vue中使用

      <v-pagination :total="total" :current="current" :pageSize="pageSize" @getPageSize="getPageSize" @jump="jump"
          ></v-pagination>

完整index.vue代码

<template>
  <div class="wrapper" v-swipeleft='left' v-swiperight='right'>
      <v-pagination :total="total" :current="current" :pageSize="pageSize" @getPageSize="getPageSize" @jump="jump"
          ></v-pagination>
  </div>
</template>

<script> export default { data () { return { total:20, current:4, pageSize:25 } }, methods:{ jump(index){ this.current=index; }, getPageSize(pageSize){ this.pageSize=pageSize; } }, components:{ 'v-pagination':(resolve)=>{ require(['components/pagination'],resolve); } } } </script>
<style lang="less" scoped="scoped"> .wrapper{ height:100%; width:100%; } </style>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM