一篇文章告诉你如何实现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 相关文章推荐
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
详解Vue 的异常处理机制
Nov 30 Vue.js
vue中如何自定义右键菜单详解
Dec 08 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
vue 数据操作相关总结
Dec 17 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
vue实现简易的双向数据绑定
Dec 29 Vue.js
vue-video-player 断点续播的实现
Feb 01 Vue.js
Vue详细的入门笔记
May 10 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
vue+elementUI实现表格列的显示与隐藏
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怎样用正则抓取页面中的网址
2016/08/09 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
Python中subprocess模块用法实例详解
2015/05/20 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
详解Python中的type和object
2018/08/15 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
Hotels.com印度:酒店预订
2019/05/11 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
小学教师国培感言
2014/02/08 职场文书
人事专员工作职责
2014/02/22 职场文书
明信片寄语大全
2014/04/08 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
大学生党课感想
2015/08/11 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers