一篇文章告诉你如何实现Vue前端分页和后端分页


Posted in Vue.js onFebruary 18, 2022

1:前端手写分页(数据量小的情况下)

前端需要使用slice截取: tableData((page-1)pageSize,pagepageSize)

一篇文章告诉你如何实现Vue前端分页和后端分页

一篇文章告诉你如何实现Vue前端分页和后端分页

2:后端分页,前端只需要关注传递的page和pageSize

3:前端手写分页按钮

<body>
  <div id="app">
    <table class="table table-bordered table-condensed">
      <tr class="bg-primary">
        <th class="text-center">排序</th>
        <th class="text-center">用户姓名</th>
        <th class="text-center">用户性别</th>
        <th class="text-center">所在城市</th>
      </tr>
      <tr class="text-center active"  v-for="(v,i) in list" :key="i">
        <td>{{num(i)}}</td>
        <!-- <td>{{params.pagesize}}</td> -->
        <td>{{v.name}}</td>
        <td>{{v.sex}}</td>
        <td>{{v.addr}}</td>
      </tr>       
    </table>
    <nav aria-label="Page navigation" style="text-align: center;">
      <ul class="pagination">
        <!-- 上一页 -->
        <li @click="prePage()" :class="{'disabled':params.page == 1}">
          <a aria-label="Previous">
            <span aria-hidden="true">&laquo;</span>
          </a>
        </li>
        <li :class="{'active': params.page == page}" v-for="(page,index) in pages" :key="index" @click="curPage(page)">
          <a  style="cursor: pointer;">
            {{page}}
          </a>
        </li>
        <!-- 下一页 -->
        <li :class="{'disabled':params.page == totalPage}" @click="next()">
          <a aria-label="Next">
            <span aria-hidden="true">&raquo;</span>
          </a>
        </li>
      </ul>
    </nav>
  </div>
</body>
window.onload = function () {
  // 1s内只允许发送请求(出发事件)一次(可多次点击) 节流 throttle
  new Vue({
    el: '#app',
    data: {
      params:{
        page:1,
        pagesize:20,
        name:''
      },
      list: [],
      total:0,//总的条数
      totalPage:0,//总的页数
      flag: false,
    },
    created() {
      this.getData()
    },
    computed: {
      pages() {
        let totalPage = this.totalPage;
        let page = this.params.page;
        // 总的页数小于10页
        if(totalPage < 10) return totalPage;
        // 总的页数大于10页添加省略号
        if(page <= 5) { // 前五页
          // (1) 页码小于5 左边显示六个
          return [1,2,3,4,5,6,'...',totalPage]
        } else if (page >= totalPage - 5) { // 后五页
          console.log("触发")
          // (2) 页码大于总页数-5 右边显示六个
          return [1,'...',totalPage-5,totalPage-4,totalPage-3,totalPage-2,totalPage-1,totalPage]
        } else { // 中间五页
          // (3)页码在 5-(totalPage-5)之间 左边区间不能小于5  右边区间不能大于总页数totalPage,注意  左边的当前页-num 不能小于1, 右边的当前页+num不能大于总页数
          return [1,'...',page-1,page,page+1,page+2,page+3,'...',totalPage]
        }
      },
      num() {
        let { pagesize, page} = this.params
        // (1-1) * 10 + 10 + 0 + 1 = 1;
        // (2-1) * 10 + 10 + 0 + 1 = 11 
        // 第一页 = (当前页 -1 )* 每页的条数 + 索引值 + 1 保证是从1开始的
        return i => (page - 1) * pagesize + i + 1  // (当前页- 1 * 每页的条数) + 索引值 + 1
      }
    },
    methods: {
      getData() {
        if(this.flag) return;
        this.flag = true;
        // 下面就是相当于一个定时器
        axios.get('http://localhost:3000/user/listpage',{params:this.params}).then(res => {
          console.log('res',res.data.users)
          let { total,users } = res.data.users;
          this.total = total;
          this.totalPage = Math.ceil( this.total / this.params.pagesize);
          this.list = users
          this.flag = false;
        })
      },
      curPage(page) {
        if(page == '...') return 
        if(this.flag) return;
        this.params.page = page;
        this.getData()
      },
      prePage() {
        // if(this.params.page == '...') return 
        if(this.params.page > 1) {
          if(this.flag) return;
          --this.params.page;
          console.log('page',this.params.page)
          this.getData()
        }
      },
      next() {
        // if(this.params.page == '...') return 
        if(this.flag) return;
        console.log("执行",this.totalPage)
        if(this.params.page < this.totalPage) {
          ++this.params.page;
          console.log('page',this.params.page)
          this.getData()
        }
      },
     } 
  })
}

一篇文章告诉你如何实现Vue前端分页和后端分页

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!

Vue.js 相关文章推荐
springboot+vue实现文件上传下载
Nov 17 Vue.js
vue 插槽简介及使用示例
Nov 19 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
详解vue身份认证管理和租户管理
May 25 Vue.js
Vue监视数据的原理详解
Feb 24 Vue.js
如何优化vue打包文件过大
Apr 13 Vue.js
vue ant design 封装弹窗表单的使用
Jun 01 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 #Vue.js
vue3获取当前路由地址
Feb 18 #Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 #Vue.js
vue项目支付功能代码详解
Feb 18 #Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 #Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 #Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 #Vue.js
You might like
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
php计算一个文件大小的方法
2015/03/30 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
PHP attributes()函数讲解
2019/02/03 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
Python使用functools实现注解同步方法
2018/02/06 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
python实时监控logstash日志代码
2020/04/27 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
自动化毕业生专业自荐书范文
2014/02/04 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2014年法务工作总结
2014/12/11 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
通过Python把学姐照片做成拼图游戏
2022/02/15 Python