分页组件,新增和删除对页码处理

353 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情

el-pagination的常用的两个自带事件

image.png

@current-change默认传递跳转后的page参数

<el-pagination
:total="total" 
:page-size="pageParams.pagesize" 
layout="prev,pager,next" 
@current-change="hCurrentChange" />
hCurrentChange(page) {
      // (1)改变请求页面参数page
      this.pageParams.page = page
      // (2)重发请求渲染页面
      this.loadRoles()
    }

@size-change默认传递更改后的pagesize

<el-pagination layout="total, sizes, prev, pager, next, jumper"
:page-sizes="[5,10,15,20]"
:page-size="size"
:total="total"
@size-change="hSizeChange"
@current-change="hCurrentChange" />
    // 3.3 页码大小改变
    hSizeChange(cursize) {
      this.size = cursize
      this.page = 1
      // 加载页面
      this.loadEmployees()
    },

删除数据后当页为空,到前一页

背景:

  • 当我们删除时,会出现一个bug,
  • 当前页只有一项数据时,如果删除该项数据,那么当前页就没有数据了,显示为空,这样是不对的
  • 产生这样的原因是,虽然删除数据后,重新渲染了界面,但是请求的页码page还是当前页,但是当前页已经没有 数据了
  • 所以要对页码page处理,处理如下

如果当前页长度为一,则跳转上一页,

跳转上一页,page--

但是页码不能小于1

所以page = Math.max(1, page)

最后绑定数据到data,this.pageParams.page = page

 async doDel(id) {
      try {
        const res = await doDel(id)
        console.log(res)
        // 1. 提示
        this.$message.success('删除成功')

        // 如果删除是最后一条数据,则页码要-1
        if (this.roles.length === 1) {
          let page = this.pageParams.page
          page--
          // 页码不能减是0
          // if (this.pageParams.page === 0) {
          //   this.pageParams.page = 1
          // }
          page = Math.max(1, page)
          this.pageParams.page = page
        }

        // 3. 重新请求
        this.loadRoles()
      } catch (err) {
        console.log(err)
      }
    },

添加数据跳转最后一页

  • 当我们新增一个新的数据时,刷新页面,还是当前页面
  • 看不到新增的数据
  • 如果想要看到新增的数据,就要对page进行处理
  • 处理如下:

增加数据

this.total++ 总数加1

跳转到最后一页

this.pageParams.page = Math.ceil((this.total) / this.pageParams.pagesize)

    // 3.新增
    async doAdd() {
      try {
        const res = await addRole(this.roleForm)
        console.log(res)
        this.total++// 总数加1
        // 跳转到最后一页
        this.pageParams.page = Math.ceil((this.total) / this.pageParams.pagesize)
        this.loadRoles()
        this.$message.success('添加成功')
        this.showDialog = false
      } catch (err) {
        this.$message.error('添加失败')
        console.log(err)
      }
    },

分页下标同步跳转 :current-page.sync="pageParams.page"`

              <el-pagination
                layout="prev,pager,next"
                :total="total"
                :page-size="pageParams.pagesize"
                :current-page.sync="pageParams.page"
                @current-change="hCurrenChange"
              />