溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Element-UI之Pagination組件怎么用

發(fā)布時間:2021-08-10 11:43:22 來源:億速云 閱讀:211 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)Element-UI之Pagination組件怎么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

先說結(jié)論:在改變pageSize時,若當(dāng)前的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>

數(shù)據(jù)都是異步獲取的,所以會定義一個獲取數(shù)據(jù)的方法:

getData() {
 const params = {
 pageSize: this.pageSize,
 currentPage: this.currentPage
 };

 get(params).then(res => {
 if (res.status === 0) {
 ...
 this.total = res.result.count;
 }
 });
}

一般我們會在pageSize或currentPage改變時,再次去獲取新數(shù)據(jù):

handleSizeChange(val) {
 this.pageSize = val;
 this.getData();
},
handleCurrentChange(val) {
 this.currentPage = val;
 this.getData();
}

以上都符合常理,看起來沒什么問題!但是,來看以下這種特殊情況:

假設(shè)有473條數(shù)據(jù),即total = 473

當(dāng)前pageSize = 10, pageCount = Math.ceil(473 / 10) = 48, currentPage = 48

現(xiàn)在將pageSize = 200,則pageCount = Math.ceil(473 / 200) = 3

這時奇怪的事情就發(fā)生了,首先頁面的表現(xiàn)為:先是無數(shù)據(jù),然后過一會數(shù)據(jù)才加載。

打開控制臺查看網(wǎng)絡(luò)請求,發(fā)現(xiàn)獲取了兩次數(shù)據(jù)!

查看請求參數(shù),第一次為:pageSize: 200, currentPage : 48

第二次為:pageSize: 200, currentPage: 3

這好像可以解釋了,為什么請求了兩次數(shù)據(jù)?因為pageSize與currentPage的改變都會觸發(fā)事件去請求數(shù)據(jù)。

但是!pageSize是我們手動改變的,那currentPage呢?

查看整個組件內(nèi)可能觸發(fā)currentPage的行為,但并沒有。

那只有一種可能,就是Element-UI庫內(nèi)部幫我們修改的!

秉著不求甚解的理念,去查看了Element-UI中Pagination組件的源碼:

其中currentPage在Pagination組件內(nèi)叫 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);
 }
 }
 }
}

注意我注釋標(biāo)明的地方:

newVal = this.getValidCurrentPage(newVal)

方法名getValidCurrentPage,顧名思義 獲取有效的當(dāng)前頁

以上兩點(diǎn)足以證明,Element-UI中的Pagination組件會修改currentPage為一個有效值!

具體看看getValidCurrentPage方法的實(shí)現(xiàn):

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;
 }

重點(diǎn)看這句代碼:

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

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

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

感謝各位的閱讀!關(guān)于“Element-UI之Pagination組件怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI