vue element 实现分页功能

本文详细介绍了如何使用Element UI的el-pagination组件实现前端分页功能,包括设置每页数量、监听页数变化和优化数据加载策略。作者分享了从数据库获取数据、处理对象数组并更新表格数据的关键代码段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学分页功能,这里总结下前端如何实现分页

用的是element框架和el-pagination组件

效果图:

template代码:

table表格省略了,我让数据绑在tableData数组里

<el-pagination
      :page-size="pageSize" // 设置每页显示多少条
      @current-change="currentChangeHandle" // 当前页数改变时调用函数
      :current-page="currentPage" // 当前第几页
      layout="total, prev, pager, next"
      :total="total" // 总共多少条信息
      background>
</el-pagination>

script代码:


var pageNum
export default {
    data () {
        return {
          total: 0,
          pageSize: 5,
          currentPage: 1,
          totalPage: [{
            id: '',
            name: '',
            sex: '',
            birthday: '',
            religon: '',
            address: '',
            note: ''
          }],
          tableData: [{
            id: '',
            name: '',
            sex: '',
            birthday: '',
            religon: '',
            address: '',
            note: ''
          }]
        }
    }
 methods: {
      currentChangeHandle (val) {
        this.currentPage = val
        this.getdata()
      },
      getdata () {
      this.$axios.get('/user')
        .then(response => {
          console.log(response.data)
          this.total = response.data.length
          pageNum = Math.ceil(this.total / this.pageSize) || 1
          this.totalPage = Object.keys(response.data).map(key => {
            console.log(response.data)
            return response.data[key]
          })
          for (let i = 0; i < pageNum; i++) {
            this.tableData = this.totalPage.slice(this.pageSize * (this.currentPage - 1), this.pageSize * this.currentPage)
          }
        })
        .catch(function (error) {
          console.log(error)
        })
    }
}

 

以上是我的代码

整体思路 :

  1. 通过el-pagination组件设置好每页显示多少条,默认当前页,以及换页时的动作监听
  2. 从获取到的数组中选出想要展示在这个页面的子数组,将子数组赋给与表格绑定的数组(我的是tableData)。即
    for (let i = 0; i < pageNum; i++) {
                this.tableData = this.totalPage.slice(this.pageSize * (this.currentPage - 1), this.pageSize * this.currentPage)
              }

    要注意先判断获取到的数据是对象还是数组,比如我拿到的就是对象,所以我要先将对象转换为数组

    this.totalPage = Object.keys(response.data).map(key => {
                console.log(response.data)
                return response.data[key]
              })

     

  3. currentChangeHandle方法,当前页数发生改变时,重新调用getdata()方法,将新的数组赋给tableData
    currentChangeHandle (val) {
          this.currentPage = val
          this.getdata()
          console.log(`当前页: ${val} `)
        }

     

这样一个简单的分页就做好了。

感觉有一个缺点就是,每次换页都要从数据库获取一次全部数据。所以步骤2可以单独写一个方法,只要我们把获取到的数据存到一个数组里,每次换页只需要从这个数组取出对应的子数组,而不需要频繁调用数据库了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值