国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Element-UI踩坑之Pagination組件的使用

2019-11-19 12:37:04
字體:
來源:轉載
供稿:網友

先說結論:在改變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 ? value : resetValue; }

重點看這句代碼:

else if (value > this.internalPageCount) { resetValue = this.internalPageCount;}

這里就是我們遇到的特殊情況,在改變pageSize時,若當前的currentPage超過了最大有效值,就會修改為最大有效值!

其實Element-UI修改的說法并不正確,它只是向上派發了事件,最終修改值的是我們自己。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥中县| 岳阳县| 青州市| 宜州市| 抚顺县| 兴城市| 鄯善县| 长沙市| 海盐县| 嘉祥县| 广丰县| 綦江县| 祁门县| 广安市| 云浮市| 穆棱市| 伊宁县| 鄂伦春自治旗| 正蓝旗| 延吉市| 宁德市| 金寨县| 钦州市| 彩票| 鞍山市| 大理市| 潍坊市| 神池县| 陇川县| 尚义县| 林州市| 荥经县| 洛阳市| 香河县| 高雄市| 南和县| 孟连| 永川市| 宁陕县| 江安县| 兴城市|