• element-ui 切换分页条数,触发两次请求-bug记录, 分页组件封装


    element-ui 切换分页条数,触发两次请求-bug记录, 分页组件封装

    前言介绍:
    以组件完整功能为例需要配置的参数为current-page、page-sizes、page-size、total:
    current-page,文档所指为当前页数;显示当前数据所拥有页数
    page-sizes,文档所指为每页显示个数选择器的选项设置;对当前页数据显示个数进行配置(以数组形式进行配置,例:[10, 20, 30, 40])
    page-size,文档所指为每页显示条目个数,支持 .sync 修饰符;限制每页显示的条数
    total,文档所指为总条目数,显示接口返回的数据总条目数
    total不要与page-size 混淆,在没有指定current-page的情况下组件自动依据total(数据总条目数)进行分页(前提得指定page-size并且指定数量不能大于total),如果混淆会导致没有进行分页或者数据总条目数不准确
    (以上为照搬大佬文案, 点击查看原文)

    以下分页封装方法是个人对这位大佬使用的方法进行进一步修改, 使用前请结合自己项目的合理性进行参考

    步骤:

    1.先手动计算要跳转的最大页数
    2.判断当前页是否大于最大页数, 如果是就返回最大页数
    3.再设置一个状态值, 当state为false时, handleCurrentChange事件将直接return, 这样就不会出现调用两次接口的情况
    结构代码

    <template>
      <div :class="{'hidden':hidden}" class="pagination-container">
        <el-pagination
          :background="background"
          :current-page.sync="currentPage"
          :page-size.sync="pageSize"
          :layout="layout"
          :page-sizes="pageSizes"
          :total="total"
          v-bind="$attrs"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
        />
      div>
    template>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    script代码

    <script>
    export default {
      name: 'Pagination',
      props: {
        total: {
          required: true,
          type: Number
        },
        page: {
          type: Number,
          default: 1
        },
        limit: {
          type: Number,
          default: 20
        },
        pageSizes: {
          type: Array,
          default() {
            return [10, 20, 30, 50]
          }
        },
        layout: {
          type: String,
          default: 'total, sizes, prev, pager, next, jumper'
        },
        background: {
          type: Boolean,
          default: true
        },
        autoScroll: {
          type: Boolean,
          default: true
        },
        hidden: {
          type: Boolean,
          default: false
        }
      },
      data() {
        return {
          state: true
        }
      },
      computed: {
        currentPage: {
          get() {
            return this.page
          },
          set(val) {
            this.$emit('update:page', val)
          }
        },
        pageSize: {
          get() {
            return this.limit
          },
          set(val) {
            this.$emit('update:limit', val)
          }
        }
      },
      methods: {
        handleSizeChange(val) {
          const pageMax = Math.ceil(this.total / val) // 先手动计算要跳转的最大页数
          if (this.page > pageMax) { // 判断当前页是否大于最大页数, 如果是就返回最大页数
            this.state = false // 再设置一个状态值, 当state为false时, handleCurrentChange事件将直接return, 这样就不会出现调用两次接口的情况
            this.$emit('pagination', { page: pageMax, limit: val })
          } else {
            this.$emit('pagination', { page: this.currentPage, limit: val })
          }
        },
        handleCurrentChange(val) {
          if (this.state === false) {
            this.state = true
            return
          }
          this.$emit('pagination', { page: val, limit: this.pageSize })
          }
        }
      }
    }
    </script>
    
    <style scoped>
    .pagination-container {
      background: #fff;
      padding: 15px 0 0 0;
    }
    .pagination-container.hidden {
      display: none;
    }
    </style>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    代码参考来自这文章 element-ui 切换分页条数,会出现两次请求,

  • 相关阅读:
    【第38篇】MixConv:混合深度卷积核
    动态规划总结
    信号驱动io
    el-form 初值和resetFields问题
    一文读懂python中mpi4py的所有基础使用
    【springBoot】博客系统
    用Nginx搭建一个可用的静态资源Web服务器
    凑钱(贪心算法)
    OD华为机试 32
    EDI系统如何恢复历史映射关系?
  • 原文地址:https://blog.csdn.net/qq_41421033/article/details/126811120