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

相关文章

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转