element ui源碼解析 -- Pagination篇( 副:列表頁進入詳情頁再返回后,如何保持當前頁碼正確 )


之所以看Pagination源碼,由於一個問題:

需求:從列表頁進入詳情頁后再返回,需求方希望保持在當前的頁碼而不是重新定位到第一頁

問題:按照element ui文檔設置current-page后請求的數據正常,但pagination的頁碼顯示卻不正確,不管current-page值等於多少,永遠顯示第一頁

 

解決方案:

1、

  改

    :current-page="currentPage"
  為
    :current-page.sync="currentPage"
 
2、查詢接口增加設置currentPage字段
  

 

 

光知道解決方案,不知道原因不行,於是翻了一下源碼

原因:

  pagination組件監聽了currentPage,pageSize,internalCurrentPage,internalPageCount

   

 

   引用pagination組件通常這么寫:

  

 

   注意:組件並沒有監聽total字段,下面會談到他

 

  

 

   這里有個getValidCurrentPage函數,從名字就能看出他是干嘛的,獲取合法的當前頁碼,來看看這個函數都干了啥

  

 

  這里有個internalPageCount,這個字段就是調用組件時傳入的total值(就是上文提到的那個total),由於要請求接口加載數據,一開始我們並不知道會有多少條數據,通常會把這個值設為0,這個值為0該函數就會返回1,組件內部的當前頁永遠是第一頁。pager.vue會按照當前頁是第一頁進行渲染。此時不管你代碼如何修改currentPage都是無效的(本人曾經認為是不是渲染時機導致的頁碼不正確)。

   以上就是文章開頭那個問題的答案。我們可以稍微修改一下參數來印證一下這個答案。

  

 

   

 

 當前頁是第二頁,請求的也是第二頁

如果你把total改成初始值為0,請求接口再去更改值的變量,頁碼顯示就會異常了。

 

擴展:

  到這里就結束了嗎,沒有,知道原因還不行,我們還得知道為什么要這么改,繼續。

  為什么要這么寫::current-page.sync="currentPage",這里就不費話了,vue官網有說明。

  

 

   請求接口后為什么要再次設置currentPage?

   還記得上文提到的那個total嗎,pagination組件並沒有監聽total字段,只監聽了currentPage,再次設置后會觸發

this.$emit('update:currentPage', newVal);

  實現頁碼渲染的更新

就醬


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM