一篇文章告诉你如何实现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组件中节流函数的失效的原因和解决方法
Dec 02 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
vue 实现图片懒加载功能
Dec 31 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
vue3使用vue-router的完整步骤记录
Jun 20 Vue.js
Vue h函数的使用详解
Feb 18 Vue.js
三种方式清除vue路由跳转router-link的历史记录
Apr 10 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中文件下载功能实现超详细流程分析
2012/06/13 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
PHP进程通信基础之信号
2017/02/19 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
Python中属性和描述符的正确使用
2016/08/23 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
Django 内置权限扩展案例详解
2019/03/04 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
三星英国官网:Samsung英国
2018/09/25 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
生物学学生自我评价
2014/01/17 职场文书
体育馆的标语
2014/06/24 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
银行求职信模板
2015/03/20 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python