一篇文章告诉你如何实现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+iview分页组件的封装
Nov 17 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
如何在vue中使用HTML 5 拖放API
Jan 14 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
vue css 相对路径导入问题级踩坑记录
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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
php7性能提升的原因详解
2019/10/13 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
Angular2库初探
2017/03/01 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
Windows下搭建python开发环境详细步骤
2020/07/20 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
python3实现基于用户的协同过滤
2018/05/31 Python
对python判断是否回文数的实例详解
2019/02/08 Python
python取余运算符知识点详解
2019/06/27 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
python两个list[]相加的实现方法
2020/09/23 Python
Python基于Faker假数据构造库
2020/11/30 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
保密工作承诺书
2014/08/29 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
小学教代会开幕词
2016/03/04 职场文书