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

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

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

先說(shuō)結(jié)論:在改變pageSize時(shí),若當(dāng)前的currentPage超過(guò)了最大有效值,就會(huì)修改為最大有效值。

一般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ù)都是異步獲取的,所以會(huì)定義一個(gè)獲取數(shù)據(jù)的方法:

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

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

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

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

以上都符合常理,看起來(lái)沒(méi)什么問(wèn)題!但是,來(lái)看以下這種特殊情況:

假設(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

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

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

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

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

這好像可以解釋了,為什么請(qǐng)求了兩次數(shù)據(jù)?因?yàn)閜ageSize與currentPage的改變都會(huì)觸發(fā)事件去請(qǐng)求數(shù)據(jù)。

但是!pageSize是我們手動(dòng)改變的,那currentPage呢?

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

那只有一種可能,就是Element-UI庫(kù)內(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)前頁(yè)

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

具體看看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時(shí),若當(dāng)前的currentPage超過(guò)了最大有效值,就會(huì)修改為最大有效值!

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡(jiǎn)單方法實(shí)現(xiàn)Vue?無(wú)限滾動(dòng)組件示例

    簡(jiǎn)單方法實(shí)現(xiàn)Vue?無(wú)限滾動(dòng)組件示例

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

    vue實(shí)現(xiàn)用戶動(dòng)態(tài)權(quán)限登錄的代碼示例

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

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

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

    vue 純js監(jiān)聽(tīng)滾動(dòng)條到底部的實(shí)例講解

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

    Vue實(shí)現(xiàn)導(dǎo)出excel表格功能

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

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

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

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

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

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

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

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

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

    vue結(jié)合leaflet實(shí)現(xiàn)熱力圖

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

最新評(píng)論

扎囊县| 营山县| 黄石市| 武清区| 阿拉善左旗| 绥滨县| 平乡县| 玉环县| 新巴尔虎右旗| 北安市| 成武县| 竹北市| 西乡县| 长岛县| 中牟县| 浦北县| 峨眉山市| 咸丰县| 会同县| 双桥区| 阜南县| 龙门县| 苏州市| 白城市| 浦东新区| 青岛市| 德安县| 泗阳县| 长海县| 扎赉特旗| 吴江市| 长春市| 伊吾县| 重庆市| 万盛区| 永定县| 鲜城| 江孜县| 莒南县| 客服| 怀集县|