亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2018年10月29日 14:58:11   作者:xshinei  
這篇文章主要介紹了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

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

打開控制臺查看網絡請求,發(fā)現獲取了兩次數據!

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

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

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

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

查看整個組件內可能觸發(fā)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修改的說法并不正確,它只是向上派發(fā)了事件,最終修改值的是我們自己。

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

相關文章

  • Vuex的store中的Module用法及說明

    Vuex的store中的Module用法及說明

    這篇文章主要介紹了Vuex的store中的Module用法及說明,具有很好的參考價值,希望對大家有所幫助。
    2023-01-01
  • Vue axios 將傳遞的json數據轉為form data的例子

    Vue axios 將傳遞的json數據轉為form data的例子

    今天小編就為大家分享一篇Vue axios 將傳遞的json數據轉為form data的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue中如何攜帶參數跳轉頁面

    vue中如何攜帶參數跳轉頁面

    這篇文章主要介紹了vue中如何攜帶參數跳轉頁面問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue零基礎入門之模板語法與數據綁定及Object.defineProperty方法詳解

    Vue零基礎入門之模板語法與數據綁定及Object.defineProperty方法詳解

    這篇文章主要介紹了Vue初學基礎中的模板語法、數據綁定、Object.defineProperty方法等基礎,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • vue實現頁面打印自動分頁的兩種方法

    vue實現頁面打印自動分頁的兩種方法

    這篇文章主要為大家詳細介紹了vue實現頁面打印自動分頁的兩種方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 一份超級詳細的Vue-cli3.0使用教程【推薦】

    一份超級詳細的Vue-cli3.0使用教程【推薦】

    這篇文章主要介紹了一份超級詳細的Vue-cli3.0使用教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • vue3中ref綁定dom或者組件失敗的原因及分析

    vue3中ref綁定dom或者組件失敗的原因及分析

    這篇文章主要介紹了vue3中ref綁定dom或者組件失敗的原因及分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue與compressor.js實現高效文件壓縮的方法

    Vue與compressor.js實現高效文件壓縮的方法

    本文將介紹基于 Vue 框架和 compressor.js 的上傳時文件壓縮實現方法,通過在上傳過程中對文件進行壓縮,減小文件大小,提升上傳速度,為用戶創(chuàng)造更快捷、高效的上傳體驗,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 詳解Vue、element-ui、axios實現省市區(qū)三級聯動

    詳解Vue、element-ui、axios實現省市區(qū)三級聯動

    這篇文章主要介紹了Vue、element-ui、axios實現省市區(qū)三級聯動,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Vue事件獲取事件對象之event.currentTarget詳解

    Vue事件獲取事件對象之event.currentTarget詳解

    這篇文章主要介紹了Vue事件獲取事件對象之event.currentTarget,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論