搜尋
首頁web前端js教程Vue實作不刷新分頁

Vue實作不刷新分頁

Apr 27, 2018 pm 01:36 PM
分頁重新整理實現

這次帶給大家Vue實作不刷新分頁,Vue實作不刷新分頁的注意事項有哪些,下面就是實戰案例,一起來看一下。

之前一直想要自己試著實現一個分頁器,但一直拖,今天寫完,大概是照著網易雲音樂的樣子來完成。這個小例子很簡單,透過這個小例子,可以學習到Vue計算屬性的使用,並了解寫分頁器需要區分的情況。這篇文章會慢慢從頭來實現這個小例子,相信你一定會學會,而且看完了我的思路之後說不定會有更棒的思路和想法!

實現的效果是這樣子的:

#一、先簡單佈局

<template>
 <p>
  </p>
<ul>
   <li><span></span></li>
   <li>
    <span>{{item}}</span>
   </li>
   <li><span></span></li>
  </ul>
 
</template>
<script>
export default {
 computed: {
  pages() {
   return 10;
  }
 }
};
</script>

效果如下:

有兩個地方說下:

  1. 最前面、最後面兩個icon用的font awesome的cdn

  2. 使用v-for來進行渲染的資料用的是計算屬性裡的pages,暫時寫了一個資料11,所以渲染出了11個標籤

二、理清思路,在這個例子裡最重要

這篇文章的例子是參考了網易雲音樂裡的分頁方法,網易的圖:

它有幾個特點:

  1. 首頁和尾頁一直都有

  2. 最多時候有11個標籤頁,包含兩個... ,但是它們不能點擊,所以我也把例子裡的頁碼設為11

  3. 在目前頁變動的時候,頁碼的形式也會發生變化,總共有三種情況,這個下面會細說

分頁的三種情況:

第一種:目前頁碼小於等於5的時候

如圖:

#這種情況首頁尾頁保留,倒數第二個頁面為..., 頁碼從頭往後算

第二種情況:目前頁碼處於最後5個的時候

如圖:

#首頁和尾頁仍然保留,第二個頁碼為...,頁碼從最後向前算

第三種情況:頁面處於較中間位置的時候

#如圖:

首頁和尾頁都保留,第二個頁碼和倒數第二個頁碼都為... ,同時頁面從當前頁碼位置向兩側算

三、用程式碼來實現上面的三種情況

從上面的想法來看,頁碼具體如何呈現由目前頁碼的位置決定,所以我們要在data裡設定一個

currentPage:1,而計算屬性裡用來渲染頁碼的pages透過currentPage來控制,同時還需要一個總頁數totalPages:50。

先寫第一種情況:

<script>
export default {
 data() {
  return {
   currentPage: 1,
   totalPages: 50
  }
 },
 computed: {
  pages() {
   const c = this.currentPage
   const t = this.totalPages
   if (c <= 5) {
    return [1, 2, 3, 4, 5, 6, 7, 8, 9, &#39;...&#39;, t]
   }
  }
 }
};
</script>

效果如下:

#############寫第二種情況,再加個if:# ##
<script>
export default {
 data() {
  return {
   currentPage: 47,
   totalPages: 50
  }
 },
 computed: {
  pages() {
   const c = this.currentPage
   const t = this.totalPages
   if (c <= 5) {
    return [1, 2, 3, 4, 5, 6, 7, 8, 9, &#39;...&#39;, t]
   } else if (c >= t - 4) {
    return [1, &#39;...&#39;, t-8, t-7, t-6, t-5, t-4, t-3, t-2, t-1, t]
   }
  }
 }
};
</script>
###把currentPage的值設為>= 46,效果如下:###############把第三種情況加上:###
computed: {
  pages() {
   const c = this.currentPage
   const t = this.totalPages
   if (c = t - 4) {
    return [1, '...', t-8, t-7, t-6, t-5, t-4, t-3, t-2, t-1, t] //第二种情况
   } else {
    return [1, '...', c-3, c-2, c-1, c, c+1, c+2, c+3, '...', t] //第三种情况
   }
  }
 }
###基本就是這樣,已經可以透過改變currentPage的值來查看分頁器的變化了。 ###

接下来实现点击相应的页码来改变currentPage的值,只要写一个点击事件再写一个函数就好了。


  • ... methods: {   select(item) {     this.currentPage = item   } } ... actived: {   border-color: #2d8cf0;   background-color: #2d8cf0;   color: #fff; }

    效果如下:

    为了让当前页码更清楚,再在页面上加上当前多少页

    <p>当前第{{currentPage}}页</p>

    效果如下:

    发现了一bug,就是我们每次点击的时候,都是将item的具体内容传递过去改变currentIPage的,但是当我们点的 ... 的时候就把它也传递过去了,但是它不是我们要的页码的数据,在计算的时候就出错了,所以我们需要做一点处理。同时,还有再点击当前页码的时候也不必再执行select函数了。

    简单改写一下select函数:

    select(n) {
      if (n === this.currentPage) return 
      if (typeof n === 'string') return 
      this.currentPage = n
    }

    这样就正常了。

    再把两侧icon向前一页和向后一页的功能加上,因为一个是加1一个是减1,所以写一个函数传递不同的参数就行了。

    
    
  • ...
  • ... prevOrNext(n) {   this.currentPage += n }

    效果如下:

    呃,边界问题,当currentPage为1时就不能再减了,当它为最大时也不能再加了。

    改写一下代码:

    prevOrNext (n) {
     this.currentPage += n
     this.currentPage  this.totalPages
      ? this.currentPage = this.totalPages
      : null
    }

    这下就可以了,如图:

    四、 结语

    写到这里,这个分页器基本功能就写完了,当然,我们还可以继续封装,在每次改变currentPage的时候用this.$emit通知外面实现通信,还可以通过props来向内传递数据,比如传递totalPages等,这些都是可以继续完善的内容。最重要的一点,关于分页器的具体计算方法,我用的是最笨的方法,所以同志们要是知道更好的办法记得留言啊~

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    vue移动端实现下拉刷新步骤详解

    Angular+Font-Awesome步骤详解

    js与typescript中class使用详解

    以上是Vue實作不刷新分頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    JavaScript的起源:探索其實施語言JavaScript的起源:探索其實施語言Apr 29, 2025 am 12:51 AM

    JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

    幕後:什麼語言能力JavaScript?幕後:什麼語言能力JavaScript?Apr 28, 2025 am 12:01 AM

    JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

    Python和JavaScript的未來:趨勢和預測Python和JavaScript的未來:趨勢和預測Apr 27, 2025 am 12:21 AM

    Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

    Python vs. JavaScript:開發環境和工具Python vs. JavaScript:開發環境和工具Apr 26, 2025 am 12:09 AM

    Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

    JavaScript是用C編寫的嗎?檢查證據JavaScript是用C編寫的嗎?檢查證據Apr 25, 2025 am 12:15 AM

    是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

    JavaScript的角色:使網絡交互和動態JavaScript的角色:使網絡交互和動態Apr 24, 2025 am 12:12 AM

    JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

    C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

    C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

    從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

    JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    EditPlus 中文破解版

    EditPlus 中文破解版

    體積小,語法高亮,不支援程式碼提示功能

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    WebStorm Mac版

    WebStorm Mac版

    好用的JavaScript開發工具

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強大的PHP整合開發環境

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)