封装分页器
展现分页器需要的数据:
(1)当前是第几页:pageNo
(2)每页有多少条数据:pageSize
(3)总共有多少条数据:total
(4)连续页码的个数(奇数):continues
在Pagination的computed中可以计算总页数,并且计算连续页码的开始值和结束值
<script> export default { name: "Pagination", props: ["pageNo", "pageSize", "total", "continues"], computed: { //总共多少页 totalPage() { //向上取证 return Math.ceil(this.total / this.pageSize); }, //计算出连续的页码的起始数字与结束数字[连续页码的数字:至少是5] startNumAndEndNum() { const { continues, pageNo, totalPage } = this; //先定义两个变量存储起始数字与结束数字 let start = 0, end = 0; //连续页码数字5【就是至少五页】,如果出现不正常的现象【就是不够五页】 //不正常现象【总页数没有连续页码多】 if (continues > totalPage) { start = 1; end = totalPage; } else { //正常现象【连续页码5,但是你的总页数一定是大于等于5的】 //起始数字 start = pageNo - parseInt(continues / 2); //结束数字 end = pageNo + parseInt(continues / 2); //把出现不正常的现象【start数字出现0|负数】纠正 if (start < 1) { start = 1; end = continues; } //把出现不正常的现象[end数字大于总页码]纠正 if (end > totalPage) { end = totalPage; start = totalPage - continues + 1; } } return { start, end }; }, }, }; </script>
动态展示分页符
(1)首先判断第一页和...和最后一页什么时候显示,什么时候隐藏
(>1,>2,<totalPage-1,<totalPage)
(2)中间部分连续页码的显示与隐藏
(3)点击页码,将当前页码传递给父组件,自定义事件为getPageNo,在search页面将页码赋值给pageNo,向后台要数据展示到页面上,并将相关数据返回给子组件pagination
<template>
  <div class="pagination">
    <!-- 上 -->
    <button :disabled="pageNo == 1" @click="$emit('getPageNo', pageNo - 1)">
      上一页
    </button>
    <button
      v-if="startNumAndEndNum.start > 1"
      @click="$emit('getPageNo', 1)"
      :class="{ active: pageNo == 1 }"
    >
      1
    </button>
    <button v-if="startNumAndEndNum.start > 2">···</button>
    <!-- 中间部分 -->
    <button
      v-for="(page, index) in startNumAndEndNum.end"
      :key="index"
      v-if="page >= startNumAndEndNum.start"
      @click="$emit('getPageNo', page)"
      :class="{ active: pageNo == page }"
    >
      {{ page }}
    </button>
    <!-- 下 -->
    <button v-if="startNumAndEndNum.end < totalPage - 1">···</button>
    <button
      v-if="startNumAndEndNum.end < totalPage"
      @click="$emit('getPageNo', totalPage)"
      :class="{active:pageNo==totalPage}"
    >
      {{ totalPage }}
    </button>
    <button
      :disabled="pageNo == totalPage"
      @click="$emit('getPageNo', pageNo + 1)"
    >
      下一页
    </button>
    <button style="margin-left: 30px">共 {{ total }} 条</button>
  </div>
</template>
search组件
          <!-- <Pagination  :pageNo="31"  :pageSize="3" :total="99" :continues="5" @getPageNo="getPageNo"/> -->
          <!-- 分页器:测试分页器阶段,这里数据将来需要替换的-->
          <Pagination
            :pageNo="searchParams.pageNo"
            :pageSize="searchParams.pageSize"
            :total="total"
            :continues="5"
            @getPageNo="getPageNo"
          />
//自定义事件的回调函数---获取当前第几页 getPageNo(pageNo) { //整理带给服务器参数 this.searchParams.pageNo = pageNo; //再次发请求 this.getData(); },
                    
                
                
            
        
浙公网安备 33010602011771号