el-pagination 切换分页条数,会出现两次请求

2024-06-17 04:12

本文主要是介绍el-pagination 切换分页条数,会出现两次请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、问题展示
  • 二、源码展示


前言

继上一次发现el-pagination在删除的时候pageNum不更新的问题。这次又发现了,切换分页条数,会出现两次请求。网上有很多解决方案,我就不多说了,我就简单记一下为啥会出现两次请求的问题


一、问题展示

在这里插入图片描述
这是点击切换分页条数,发出的请求次数,以及pageNum。上图展示的是第一次请求pageNum为2,第二次请求pageNum为1,也就是正确的请求参数。两次接口分别为一次handleSizeChange,一次handleCurrentChange

// 第一种方案
// 计算totalPage,如果大于pageNum,才执行接口请求。
// 这就说明pageNum没有超出应有的页码,接口会正常返回数据,不会为空。
// 且el-pagination组件内部不会进行pageNum的数字修正,也就不会执行handleCurrentChange。
// 而pageNum超出应有的页码,例如只有1页,但是pageNum为2的话,则不进行请求。
// el-pagination组件内部会进行pageNum的数字修正,执行handleCurrentChange。下面的源码会解析handleSizeChange(val) {const totalPage = Math.ceil(this.totalSize / val);if (this.pageNum <= totalPage) {this.getTable();}},
// 第二种方案
// 计算totalPage,如果小于pageNum,修正currentPage,再才执行接口请求。
// 这就说明pageNum超出应有的页码,例如只有1页,但是pageNum为2的话,则需要将pageNum(currentPage)修正。
// 且el-pagination组件内部不会进行pageNum的数字修正,也就不会执行handleCurrentChange。
handleSizeChange(val) {const totalPage = Math.ceil(this.totalSize / val);if (this.pageNum > totalPage) {this.currentPage = totalPage < 1 ? 1 : totalPage;}this.getTable();},

二、源码展示

代码如下:

Size:{methods: {// 1、切换分页条数之后就会执行这个方法,会执行handleSizeChangehandleChange: function handleChange(val) {if (val !== this.$parent.internalPageSize) {console.log('Size:methods:handleChange');// 这里会触发computedthis.$parent.internalPageSize = val = parseInt(val, 10);this.$parent.userChangePageSize = true;this.$parent.$emit('update:pageSize', val);this.$parent.$emit('size-change', val);}}}
}
methods: {
// 4、会执行这个方法,oldPage=2, newVal=1。这里就会执行handleCurrentChangeemitChange: function emitChange() {var _this2 = this;this.$nextTick(function () {if (_this2.internalCurrentPage !== _this2.lastEmittedPage || _this2.userChangePageSize) {console.log('methods:emitChange');_this2.$emit('current-change', _this2.internalCurrentPage);_this2.lastEmittedPage = _this2.internalCurrentPage;_this2.userChangePageSize = false;}});}
}
computed: {// 2、切换分页条数之后就会执行这个方法,会触发watchinternalPageCount: function internalPageCount() {console.log('computed:internalPageCount', Math.max(1, Math.ceil(this.total / this.internalPageSize)), Math.max(1, this.pageCount));if (typeof this.total === 'number') {return Math.max(1, Math.ceil(this.total / this.internalPageSize));} else if (typeof this.pageCount === 'number') {return Math.max(1, this.pageCount);}return null;}},watch: {internalPageCount: function internalPageCount(newVal) {/* istanbul ignore if */var oldPage = this.internalCurrentPage;// 3、会执行这个方法,oldPage=2, newVal=1。这里就会执行emitChange// 这里就是如果更新了pageNum(currentNum),那就说明oldPage和newVal一样,就不会触发emitChange,也就不会执行handleCurrentChangeconsole.log('watch:internalPageCount', oldPage, newVal);if (newVal > 0 && oldPage === 0) {this.internalCurrentPage = 1;} else if (oldPage > newVal) {this.internalCurrentPage = newVal === 0 ? 1 : newVal;this.userChangePageSize && this.emitChange();}this.userChangePageSize = false;}}

下面展示一下elementui的打印结果:
1、这是错误的调用两次请求的,handleSizeChange和handleCurrentChange
在这里插入图片描述
2、这是第一种解决方案
这里是pageNum=2,totalPage=1,是不会执行getTable方法的,if没有进去
在这里插入图片描述
3、第二种解决方案
在这里插入图片描述

这篇关于el-pagination 切换分页条数,会出现两次请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068447

相关文章

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

java实现多数据源切换方式

《java实现多数据源切换方式》本文介绍实现多数据源切换的四步方法:导入依赖、配置文件、启动类注解、使用@DS标记mapper和服务层,通过注解实现数据源动态切换,适用于实际开发中的多数据源场景... 目录一、导入依赖二、配置文件三、在启动类上配置四、在需要切换数据源的类上、方法上使用@DS注解结论一、导入

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright