最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年10月29日 14:58:11   作者:xshinei  
這篇文章主要介紹了Element-UI踩坑之Pagination組件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

先說結論:在改變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>

數(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();
}

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

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

當前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ù)才加載。

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

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

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

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

但是!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方法的實現(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;
 }

重點看這句代碼:

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

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

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

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

相關文章

  • 簡單方法實現(xiàn)Vue?無限滾動組件示例

    簡單方法實現(xiàn)Vue?無限滾動組件示例

    這篇文章主要為大家介紹了簡單方法實現(xiàn)Vue?無限滾動組件示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • vue實現(xiàn)用戶動態(tài)權限登錄的代碼示例

    vue實現(xiàn)用戶動態(tài)權限登錄的代碼示例

    這篇文章主要介紹了vue如何實現(xiàn)用戶動態(tài)權限登錄,文中的代碼示例介紹的非常詳細,對大家學習vue有一定的幫助,需要的朋友可以參考閱讀
    2023-05-05
  • 在vue中使用echarts實現(xiàn)飛機航線水滴圖詞云圖效果

    在vue中使用echarts實現(xiàn)飛機航線水滴圖詞云圖效果

    這篇文章主要介紹了在vue中使用echarts實現(xiàn)飛機航線?水滴圖?詞云圖,通過引入中國地圖JS文件,會自動注冊地圖,文中結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • vue 純js監(jiān)聽滾動條到底部的實例講解

    vue 純js監(jiān)聽滾動條到底部的實例講解

    今天小編就為大家分享一篇vue 純js監(jiān)聽滾動條到底部的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue實現(xiàn)導出excel表格功能

    Vue實現(xiàn)導出excel表格功能

    這篇文章主要介紹了Vue實現(xiàn)導出excel表格的功能,在文章末尾給大家提到了vue中excel表格的導入和導出代碼,需要的朋友可以參考下
    2018-03-03
  • vuex與組件聯(lián)合使用的方法

    vuex與組件聯(lián)合使用的方法

    Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式。這篇文章主要介紹了vuex與組件聯(lián)合使用的方法,需要的朋友可以參考下
    2018-05-05
  • Vue監(jiān)聽localstorage變化的方法詳解

    Vue監(jiān)聽localstorage變化的方法詳解

    在日常開發(fā)中,我們經常使用localStorage來存儲一些變量,這些變量會存儲在瀏覽中,對于localStorage來說,即使關閉瀏覽器,這些變量依然存儲著,方便我們開發(fā)的時候在別的地方使用,本文就給大家介紹Vue如何監(jiān)聽localstorage的變化,需要的朋友可以參考下
    2023-10-10
  • vue用BMap百度地圖實現(xiàn)即時搜索功能

    vue用BMap百度地圖實現(xiàn)即時搜索功能

    這篇文章主要為大家詳細介紹了vue用BMap百度地圖實現(xiàn)即時搜索功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • vue如何監(jiān)聽el-select選擇值的變化

    vue如何監(jiān)聽el-select選擇值的變化

    這篇文章主要介紹了vue如何監(jiān)聽el-select選擇值的變化,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue結合leaflet實現(xiàn)熱力圖

    vue結合leaflet實現(xiàn)熱力圖

    本文主要介紹了vue實現(xiàn)熱力圖,結合leaflet.heat插件可以很容易的做出熱力圖,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06

最新評論

百色市| 博客| 武冈市| 西林县| 南部县| 芦山县| 望谟县| 潮州市| 普兰县| 广河县| 内丘县| 和龙市| 丰镇市| 巴马| 开鲁县| 历史| 南郑县| 八宿县| 招远市| 九江市| 夏津县| 天长市| 大城县| 贵州省| 虞城县| 长丰县| 额济纳旗| 会宁县| 米泉市| 安岳县| 和顺县| 县级市| 乐昌市| 潜山县| 贺兰县| 红河县| 阿鲁科尔沁旗| 兴山县| 定襄县| 沂源县| 屏东县|