先说结论:在改变pageSize时,若当前的currentPage超过了最大有效值,就会修改为最大有效值。
一般Pagination组件的声明如下:
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-size="pageSize" :current-page="currentPage" :total="total" :page-sizes="[10, 20, 50, 100, 200, 300, 400]" layout="total, sizes, prev, pager, next, jumper"> </el-pagination>
数据都是异步获取的,所以会定义一个获取数据的方法:
getData() { const params = { pageSize: this.pageSize, currentPage: this.currentPage }; get(params).then(res => { if (res.status === 0) { ... this.total = res.result.count; } }); }
一般我们会在pageSize或currentPage改变时,再次去获取新数据:
handleSizeChange(val) { this.pageSize = val; this.getData(); }, handleCurrentChange(val) { this.currentPage = val; this.getData(); }
以上都符合常理,看起来没什么问题!但是,来看以下这种特殊情况:
假设有473条数据,即total = 473
当前pageSize = 10, pageCount = Math.ceil(473 / 10) = 48, currentPage = 48
现在将pageSize = 200,则pageCount = Math.ceil(473 / 200) = 3
这时奇怪的事情就发生了,首先页面的表现为:先是无数据,然后过一会数据才加载。
打开控制台查看网络请求,发现获取了两次数据!
查看请求参数,第一次为:pageSize: 200, currentPage : 48
第二次为:pageSize: 200, currentPage: 3
这好像可以解释了,为什么请求了两次数据?因为pageSize与currentPage的改变都会触发事件去请求数据。
但是!pageSize是我们手动改变的,那currentPage呢?
查看整个组件内可能触发currentPage的行为,但并没有。
那只有一种可能,就是Element-UI库内部帮我们修改的!
秉着不求甚解的理念,去查看了Element-UI中Pagination组件的源码:
其中currentPage在Pagination组件内叫 internalCurrentPage
watch: { internalCurrentPage: { immediate: true, handler(newVal, oldVal) { newVal = parseInt(newVal, 10); /* istanbul ignore if */ if (isNaN(newVal)) { newVal = oldVal || 1; } else { // 注意这里 newVal = this.getValidCurrentPage(newVal); } if (newVal !== undefined) { this.internalCurrentPage = newVal; if (oldVal !== newVal) { this.$emit('currentPage', newVal); } } else { this.$emit('currentPage', newVal); } } } }
注意我注释标明的地方:
newVal = this.getValidCurrentPage(newVal)
方法名getValidCurrentPage,顾名思义 获取有效的当前页
以上两点足以证明,Element-UI中的Pagination组件会修改currentPage为一个有效值!
具体看看getValidCurrentPage方法的实现:
getValidCurrentPage(value) { value = parseInt(value, 10); const havePageCount = typeof this.internalPageCount === 'number'; let resetValue; if (!havePageCount) { if (isNaN(value) || value < 1) resetValue = 1; } else { if (value < 1) { resetValue = 1; } else if (value > this.internalPageCount) { // 注意这里 resetValue = this.internalPageCount; } } if (resetValue === undefined && isNaN(value)) { resetValue = 1; } else if (resetValue === 0) { resetValue = 1; } return resetValue === undefined "htmlcode">else if (value > this.internalPageCount) { resetValue = this.internalPageCount; }这里就是我们遇到的特殊情况,在改变pageSize时,若当前的currentPage超过了最大有效值,就会修改为最大有效值!
其实Element-UI修改的说法并不正确,它只是向上派发了事件,最终修改值的是我们自己。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]