您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Element-UI之Pagination組件怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
先說結論:在改變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修改的說法并不正確,它只是向上派發了事件,最終修改值的是我們自己。
感謝各位的閱讀!關于“Element-UI之Pagination組件怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。