在实际开发需求,产品需要的分页组件比较简单,只可以一页页地翻,就是为了防止用于直接翻看最后的数据(因为有一些历史数据数据量比较大,查看的意义不大,检索效率比较低也比较忙,因为不希望用户在翻页的时候可以随意翻看很久之前的数据)

因此需要根据实际需求进行分页组件封装

以下封装的分页组件,勉强够用,但是还不够完善,有需要的用于可以再次基础上继续完善

 1 <template>
 2   <el-pagination @size-change="handleSizeChange" background @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="pageSizes" :page-size="pageSize" :total="total" :layout="layout">
 3     <slot>
 4       <ul class="el-pager">
 5         <li class="number active">{{currentPage}}</li>
 6         <li class="number" @click="handlePage(item)" v-for="item in pager">{{item}}</li>
 7       </ul>
 8     </slot>
 9   </el-pagination>
10 </template>
11 <script>
12 export default {
13   props: {
14     currentPage: {
15       type: [String, Number],
16       default: 1
17     },
18     total: {
19       type: [String, Number],
20       default: 0
21     },
22     pageSizes: {
23       type: Array,
24       default:function(){
25         return  [10,20,50,100,200,300,400]
26       }
27     },
28     pageSize: {
29       type: [String, Number],
30       default: 10
31     },
32     layout: {
33       type: String,
34       default: 'total,prev,slot,next,sizes'
35     }
36   },
37   data() {
38     return {
39     }
40   },
41   computed:{
42     pager:function(){
43       let pager=this.total/this.pageSize
44       pager=Math.ceil(pager)//总页数
45       if(pager<this.currentPage){
46         return []
47       }
48       let flag=this.currentPage+4
49       if(flag>pager){//大于总页数
50         let arr=[]
51         let total=pager-this.currentPage
52         for(let i=1;i<=total;i++){
53           arr.push(this.currentPage+i)
54         }
55         return arr
56       }else if(flag<=pager){
57         return [this.currentPage+1,this.currentPage+2,this.currentPage+3,this.currentPage+4]
58       }
59     }
60   },
61   methods: {
62     handlePage(page){
63       this.handleCurrentChange(page)
64     },
65     handleSizeChange(val) {
66       this.$emit('size-change', val)
67     },
68     handleCurrentChange(val) {
69       this.$emit('current-change', val)
70     }
71   }
72 }
73
74 </script>
75 <style lang="scss" scoped>
76 .page {
77   text-align: center;
78   color: #409EFF;
79 }
80
81 </style>

 页面使用:

  1、在main.js页面全局注册分页组件

// 全局注册分页组件
import newPagination from '@/components/newPagination'
Vue.component('newPagination', newPagination)

  2、页面直接调用

 <new-pagination @current-change="handleCurrentChangeExp" :page-size=listQryExp.limit layout="total, prev, pager, next" :total=totalExp></new-pagination>
01-10 12:06