一篇文章告诉你如何实现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的mixin策略
Nov 19 Vue.js
vue element实现表格合并行数据
Nov 30 Vue.js
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
vue常用高阶函数及综合实例
Feb 25 Vue.js
vue 数据双向绑定的实现方法
Mar 04 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
教你部署vue项目到docker
Apr 05 Vue.js
分享一个vue实现的记事本功能案例
Apr 11 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 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实现mysql同步的实现方法
2009/10/21 PHP
深入PHP变量存储的详解
2013/06/13 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
php绘制一个矩形的方法
2015/01/24 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
prototype 的说明 js类
2006/09/07 Javascript
javascript 限制输入脚本大全
2009/11/03 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
javascript中callee与caller的区别分析
2015/04/20 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
基于python编写的微博应用
2014/10/17 Python
Python中optparse模块使用浅析
2015/01/01 Python
Python中的choice()方法使用详解
2015/05/15 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
工程测量与监理专业应届生求职信
2013/11/27 职场文书
给同事的道歉信
2014/01/11 职场文书
中学教师管理制度
2014/01/14 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
爱心捐款感谢信
2015/01/20 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
导游词之凤凰古城
2019/10/22 职场文书
python绘制箱型图
2021/04/27 Python
解决 redis 无法远程连接
2022/05/15 Redis