Vue项目中常见问题(30)分页器起始与结束数字计算

目录

gitee仓库地址:https://gitee.com/CMD-UROOT/sph-project/commits/master

分析: 

 1.测试分页器阶段,这里数据将来需要替换的

 2.在components/Pagination/index.vue中

 3.总数据条数和总页数页面的显示

 4.算出:连续页面起始数字和结束数字


gitee仓库地址:https://gitee.com/CMD-UROOT/sph-project/commits/master

大家根据上传历史进行查找你需要的代码

分页器展示,需要哪些数据(条件)?

需要知道当前是第几页:pageNo字段代表当前页数

需要知道每一页需要展示多少条数据:pageSize字段表示

需要知道整个分页器一共有多少条数据:totel字段进行表示---[获取另外一条信息:一共多少页]

需要知道分页器连续页码的个数:5|7[奇数],因为奇数对称(好看)

总结:对于分页器而言,自定义前提需要知道四个前提条件

pageNo:当前第几页

pageSize:代表每一也展示多少条数据

total:代表整个分页一共要展示多少条数据

continues:代表分页连续页码个数

注意:自定义分页器,在开发的时候先自己传递假的数据进行调试,调试成功以后在用服务器数据

分析: 

我们的分页器是全局组件,并且分页器目前是放到我们的Search组件(搜索页面中)的

分页器中的数据来源是父组件给子组件的,所以父子间通信,我们能想到最简单的方式是props

1.测试分页器阶段,这里数据将来需要替换的

在pages/Search/index.vue中

2.在components/Pagination/index.vue中

这里是分页器我们写得全局组件

我们利用props在分页器全局组件中接收到Search父组件传递过来的参数 

3.总数据条数和总页数页面的显示

我们知道total是总页数,那么我们先把总页数利用插值语法替换结构中的数据

 那么我也知道总total和pageSize我们就可以通过计算属性,算出总共多少页

 所以总页数我们也就可以插值语法替换了

 效果:

 

现在我们测试一下Search中分页器的假数据,就是我们改改数据看看页面的效果对不对

这里我把total91条数据改成100条我们再看看页面的效果

 效果:没问题

 4.算出:连续页面起始数字和结束数字

对于分页器而言,这是很重要的一步,能做出这一步分页器就成功了50%

业务逻辑是这样的,看下面两张图

continues:代表分页连续页码个数

如果当前页数是8,6是开始的数字,10是结束的数字

如果当前页数是9, 7是开始的数字,11是结束的数字

 

 发现的规律就是,当前页始终在中间

所以我们还是利用计算属性来做这个业务

//pageNo:当前第几页 pageSize:代表每一也展示多少条数据 total:代表整个分页一共要展示多少条数据 continues:代表分页连续页码个数
    //计算出连续的页码的起始数字与结束数字[连续页码的数字:至少是5]
    startNumAndEndNum(){
      //解构出来,不解构是作为实例身上的属性,不解构没法用
      const {continues,pageNo,totalPage} = this 
      //先定义两个变量存储起始数字与结束数字
      let start = 0,end = 0
      //连续页码数字5[就是至少5页],如果出现不正常的现象[就是不够5页]
      //不正常现象[总页数没有连续页码多]
      if(continues > totalPage){
        start = 1;
        end = totalPage;
      }else{
        //正常现象[连续页码5,但是你的总页数一定是大于5的]
        //起始数字
        start = pageNo - parseInt(continues / 2) //parseInt向下取整,这里代码主要是找规律,不能写死了
        //结束数字
        end = pageNo + parseInt(continues / 2)
        //把出现不正常的现象纠正[start数字出现0|负数]
        if(start < 1){
          start = 1;
          end = continues;
        }
        //把出现不正常的现象纠正[当前页如果和总页数相等,就会导致end大于总页数的问题]
        if(end > totalPage) {
          end = totalPage
          start = totalPage - continues + 1
        }
      }
    }

修复bug的例子

 


版权声明:本文为qq_46368050原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。