精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何通過vue實現一款簡單通用的翻頁組件

開發 前端
翻到某個列表的某一頁之后,點擊某一項到編輯頁,編輯完成后希望能夠返回到跳轉之前的那一頁。這個需求如果僅僅用上面的pager組件,實現起來就不是很方便。也許有人會說結合vuex可以,但是這樣的話需要在state中記錄下跳轉前的頁碼。假如有很多個翻頁列表,就需要記錄多個,這顯然并不優雅。

預覽

先上一波效果圖:

 基本元素

首先,翻頁組件(以下稱“pager組件”)一般擁有的元素有:

  • 上一頁
  • ***頁
  • 中間顯示的頁碼
  • ***一頁
  • 下一頁

初始化時需要的配置有:

  • totalPage(總頁數)
  • initPage(初始頁)
  • showPrev(是否顯示上一頁)
  • showNext(是否顯示下一頁)
  • showItems(中間顯示幾頁)
  • showJump(是否顯示跳轉到第幾頁)

這些可以通過vue的props來接收。

另外,pager組件本身需要有一個記錄當前頁的currentPage,pages數組用來容納中間顯示的頁碼,jumpPage綁定輸入的跳轉頁碼。

基本實現

對應的代碼為:

  1. <template> 
  2.     <div class="pager-wrapper" v-if="totalPage > 0"
  3.         <div class="pager-pages"
  4.             <a v-show="currentPage > 1 && showPrev" @click="go(currentPage - 1)">上一頁</a> 
  5.             <a :class="{active: currentPage == 1 ? true : false}" @click="go(1)">1</a> 
  6.             <strong v-show="pages[0] > 2">...</strong> 
  7.             <a v-for="page in pages" :class="{active: currentPage == page ? true : false}" @click="go(page)">{{page}}</a> 
  8.             <strong v-show="pages[pages.length-1] < totalPage - 1">...</strong> 
  9.             <a v-if="totalPage > 1" :class="{active: currentPage == totalPage ? true : false}" @click="go(totalPage)">{{totalPage}}</a> 
  10.             <a v-show="currentPage < totalPage && showNext" @click="go(currentPage + 1)">下一頁</a> 
  11.         </div> 
  12.         <div v-if="showJump" v-show="totalPage > 1" class="pager-jump"
  13.             <span>共<em class="jump-total">{{totalPage}}</em>頁 ,跳至</span> 
  14.             <input type="number" min="1" :max="totalPage" v-model="jumpPage" class="jump-input"
  15.             <span>頁</span> 
  16.             <a @click="go(jumpPage)">確定</a> 
  17.         </div> 
  18.     </div> 
  19. </template> 
  20. <script> 
  21.   export default { 
  22.         props: { 
  23.             totalPage: { // 總頁數 
  24.                 type: Number, 
  25.                 default: 1, 
  26.                 required: true 
  27.             }, 
  28.             showItems: { // 顯示出來的頁數,如: 1 ... 34[5]67 ... 10 
  29.                 type: Number, 
  30.                 default: 5 
  31.             }, 
  32.             showPrev: { // 是否顯示“上一頁” 
  33.                 type: Boolean, 
  34.                 defaulttrue 
  35.             }, 
  36.             showNext: { // 是否顯示“下一頁” 
  37.                 type: Boolean, 
  38.                 defaulttrue 
  39.             }, 
  40.             showJump: { // 是否顯示“跳轉” 
  41.                 type: Boolean, 
  42.                 defaulttrue 
  43.             }, 
  44.             initPage: { 
  45.                 type: Number, 
  46.                 default: 1 
  47.             } 
  48.         }, 
  49.         data () { 
  50.             return { 
  51.                 currentPage: 0, 
  52.                 pages: [], 
  53.                 jumpPage: 0, 
  54.             } 
  55.         }, 
  56.         created () {// 初始化時currentPage賦值 
  57.             this.currentPage = this.initPage 
  58.         } 
  59.         methods: { 
  60.             go (page) { 
  61.                 if(page < 1) { 
  62.                     page = 1 
  63.                 } 
  64.                 if(page > this.totalPage) { 
  65.                     page = this.totalPage 
  66.                 } 
  67.                 if(page === this.currentPage) { 
  68.                     return 
  69.                 } 
  70.                 this.currentPage = parseInt(page,10) 
  71.                 this.$emit('go-page',{ 
  72.                     page: this.currentPage 
  73.                 }) 
  74.             } 
  75.         }, 
  76.         watch: { 
  77.             currentPage (newVal) { 
  78.                 this.jumpPage = newVal 
  79.             }, 
  80.             initPage (newVal) { 
  81.                 if(this.currentPage !== newVal) { 
  82.                     this.currentPage = newVal 
  83.                 } 
  84.             } 
  85.         } 
  86.     } 
  87. </script>  

接下來就是pages數組的值如何獲取到。由于pages始終是跟當前頁currentPage以及配置中需要顯示的showItems強相關的,那么完全可以將pages改為計算屬性:

  1. computed: { 
  2.     pages () { 
  3.         // 根據起始頁碼和結束頁碼得到頁碼數組 
  4.         let getPages = (start,end) => { 
  5.             if(start <= 1 || start > end || start >= this.totalPage) { 
  6.                 start = 2 
  7.             } 
  8.             if(end >= this.totalPage || end < start || end <= 1) { 
  9.                 end = this.totalPage - 1 
  10.             } 
  11.             let arr = [] 
  12.             for(let i = start; i <= end; i++) { 
  13.                 arr.push(i) 
  14.             } 
  15.             return arr 
  16.         } 
  17.         let counts = this.showItems 
  18.         if(this.totalPage < counts + 2) { 
  19.             return getPages(2,this.totalPage) 
  20.         } else { 
  21.             if(this.currentPage <= Math.ceil(counts/2)) { 
  22.                 return getPages(2,counts) 
  23.             } else if(this.currentPage >= this.totalPage - Math.floor(counts/2)) { 
  24.                 return getPages(this.totalPage + 1 - counts,this.totalPage - 1) 
  25.             } else { 
  26.                 let half = Math.ceil(counts/2) - 1 
  27.                 let end = this.currentPage + half 
  28.                 if(counts % 2 === 0) { 
  29.                     end++ 
  30.                 } 
  31.                 return getPages(this.currentPage - half,end
  32.             } 
  33.         } 
  34.     } 

 功能拓展

到這里一個普通的翻頁組件基本上就實現了(樣式自己可以去定制)。但是很多時候(特別是一些管理后臺),結合vue-router做成SPA,通常會有這樣的需求:

翻到某個列表的某一頁之后,點擊某一項到編輯頁,編輯完成后希望能夠返回到跳轉之前的那一頁。

這個需求如果僅僅用上面的pager組件,實現起來就不是很方便。也許有人會說結合vuex可以,但是這樣的話需要在state中記錄下跳轉前的頁碼。假如有很多個翻頁列表,就需要記錄多個,這顯然并不優雅。

不過因為vue-router實現的優雅,我們要滿足上面的需求也很簡單:

首先props上增加mode配置,由于當mode為params時,跳轉需要知道是在哪一個路由下,所以:

  1. mode: { 
  2.     type: String, 
  3.     default'event' // 'event' | 'query' | 'params' 
  4. }, 
  5. routeName: { 
  6.     type: String 

 然后再在實際跳轉的邏輯方法go(page)里面,做點更改:

  1. go (page) { 
  2.     if(page < 1) { 
  3.         page = 1 
  4.     } 
  5.     if(page > this.totalPage) { 
  6.         page = this.totalPage 
  7.     } 
  8.     if(page === this.currentPage) { 
  9.         return 
  10.     } 
  11.     this.currentPage = parseInt(page,10) 
  12.     if(this.mode == 'query') { 
  13.         let query = this.$route.query 
  14.         query.page = this.currentPage 
  15.         this.$router.go({query: query}) 
  16.     } else if(this.mode == 'params') { 
  17.         let params = this.$route.params 
  18.         params.page = this.currentPage 
  19.         this.$router.go({name: this.routeName,params: params}) 
  20.     } else { 
  21.         this.$emit('go-page',{ 
  22.             page: this.currentPage 
  23.         }) 
  24.     } 

這樣基本上就完成了一個簡單且通用的翻頁組件啦,接下里就是發不到倉庫里供大家使用了。

本文最終實現的翻頁組件已經發布,大家可以看一波源碼:

vue-simple-pager

總結

總體上講的比較淺顯,希望能有幫助。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2015-11-27 09:18:11

AngularJSWeb應用

2023-01-29 07:49:57

2025-03-05 10:01:44

2014-12-16 10:11:22

2017-03-06 11:02:59

產品軟件Power Desig

2020-12-03 09:00:02

Java外賣系統

2021-02-20 07:02:24

Vue.js組件開發技術

2023-03-31 14:51:46

CSS圖案背景開發

2024-06-11 00:00:00

Java線程安全緩存組件

2020-12-03 09:33:58

前端開發工具

2021-07-07 06:52:17

云圖word-cloud工具

2023-07-03 08:25:54

2011-06-17 11:22:33

jQueryjQuery插件

2020-12-29 05:26:27

視頻播放器Vuevideo

2022-02-28 08:19:25

圖片預覽動畫前端

2022-02-08 15:55:00

Vue組件庫Vue Demi

2020-12-07 11:50:14

Java學習系統eclipse

2009-05-11 15:12:03

網管軟件產品摩卡軟件

2014-06-20 10:32:42

APP上癮設計

2022-04-18 19:02:53

chrome擴展瀏覽器
點贊
收藏

51CTO技術棧公眾號

国产人成精品一区二区三| 精品午夜av| 国产欧美一区二区三区网站| 成人国产精品av| 日本少妇毛茸茸高潮| 欧美人与牛zoz0性行为| 91精品国产全国免费观看| 成年人午夜视频在线观看| 激情小视频在线观看| 国产乱码精品一区二区三区av| 午夜精品理论片| 日本 欧美 国产| 福利在线一区| 欧美挠脚心视频网站| 国产精品va无码一区二区| 欧美r级在线| 久久综合九色欧美综合狠狠| 亚洲直播在线一区| 波多野结衣绝顶大高潮| 在线视频观看日韩| 久久综合免费视频影院| 久久久久亚洲av无码专区桃色| 99视频这里有精品| 欧美性xxxx极品hd欧美风情| 福利在线小视频| av片在线看| 久久综合色之久久综合| 国产精品乱码视频| 国产黄色片av| 久久99精品久久久久久动态图| 欧美一性一乱一交一视频| 欧美日韩在线国产| 亚洲香蕉av| 社区色欧美激情 | xxxxx在线观看| 欧美丝袜美腿| 亚洲国产高潮在线观看| 操人视频免费看| 久久精品国产福利| 欧洲一区二区三区在线| 免费观看日韩毛片| 国产调教在线| 婷婷中文字幕综合| 少妇高潮喷水在线观看| 后进极品白嫩翘臀在线播放| 亚洲蜜臀av乱码久久精品蜜桃| 伊人久久av导航| av基地在线| 国产精品毛片无遮挡高清| 色一情一乱一伦一区二区三区丨| 完全免费av在线播放| 久久午夜国产精品| 麻豆久久久9性大片| 香蕉av一区二区三区| 成人视屏免费看| 不卡视频一区| 高h调教冰块play男男双性文| 国产成人午夜视频| 91一区二区三区| 精品久久人妻av中文字幕| 国产精品一区二区你懂的| 亚洲淫片在线视频| 丰满熟女一区二区三区| 波多野结衣一区二区三区| 久久精彩视频| 国产在线视频你懂得| 亚洲国产高清在线观看视频| 一区不卡字幕| 99热国产在线中文| 性做久久久久久免费观看欧美| 久久综合久久网| 国产高潮在线| 欧美影视一区二区三区| 亚洲视频一二三四| 岛国精品一区| 亚洲欧美日韩视频一区| 五月婷婷六月香| 91精品国产成人观看| 午夜精品久久久久久久99黑人| 国产成人一级片| 久久www免费人成看片高清| 99在线免费观看视频| 日韩电影在线观看完整版| 亚洲国产精品ⅴa在线观看| 潘金莲一级淫片aaaaaa播放1| 暖暖在线中文免费日本| 欧美日韩在线另类| 成人免费在线观看视频网站| 久久9999免费视频| 亚洲欧美一区二区三区在线| 永久免费未视频| 亚洲久色影视| 成人黄色免费在线观看| 香蕉视频黄在线观看| 中文字幕高清一区| 欧美日韩福利在线| 国产资源一区| 亚洲国产天堂久久国产91| 神马久久久久久久久久久| 亚洲精品a级片| 日韩av成人在线| 亚洲h视频在线观看| 国产亚洲人成网站| 欧美国产日韩激情| 另类一区二区三区| 亚洲精品国产拍免费91在线| 黄色录像免费观看| 久久天天综合| 国产伦精品一区二区三区照片 | 亚洲免费观看高清| 欧美精品成人网| 国产精品毛片视频| 久久久精品亚洲| 国产免费一区二区三区四区五区| 国产高清精品久久久久| 亚洲高清在线播放| 在线看的毛片| 日韩午夜精品电影| 欧美另类69xxxx| 翔田千里一区二区| 丁香五月网久久综合| 麻豆影视在线观看_| 色综合久久久久综合体| 特级西西人体wwwww| 午夜国产精品视频免费体验区| 国产精品1区2区在线观看 | 最好看的2019的中文字幕视频| 日韩欧美一区二区一幕| 国产精品亚洲人在线观看| 伊人久久大香线蕉av一区| av激情成人网| 亚洲天堂网在线观看| 国产黄色片免费看| 播五月开心婷婷综合| 久久久久久久9| 视频在线亚洲| 欧美激情精品久久久久久久变态| 国产精品污视频| 国产精品久久久久久久午夜片| 狠狠热免费视频| 欧美精品羞羞答答| 国产精品第二页| 9i精品一二三区| 色婷婷国产精品久久包臀| 国产乱了高清露脸对白| 99精品久久久| 狠狠色噜噜狠狠色综合久| 国产黄大片在线观看| 亚洲成人黄色网址| 日韩成人高清视频| 99久久免费视频.com| 国产极品尤物在线| 奇米777国产一区国产二区| 国外成人在线播放| 三级视频网站在线| 色噜噜夜夜夜综合网| 精品国产aaa| 久久er99热精品一区二区| 在线一区高清| 奇米一区二区| 97**国产露脸精品国产| 免费在线国产| 欧美日韩高清一区二区| 国产精品三区在线观看| 成人免费黄色大片| aa在线免费观看| 久久国产影院| 91性高湖久久久久久久久_久久99| www.欧美日本韩国| 亚洲大尺度美女在线| 色av性av丰满av| 国产精品久久久久久久裸模| 日本55丰满熟妇厨房伦| 一本综合精品| 色噜噜色狠狠狠狠狠综合色一| 黄色成人小视频| 欧美黑人性视频| 日本私人网站在线观看| 欧美日韩日日夜夜| 免费网站看av| 久久精品免费在线观看| 三年中文在线观看免费大全中国| 亚洲高清免费| 日韩国产美国| 高潮按摩久久久久久av免费| 国产成人精品综合| 性直播体位视频在线观看| 亚洲精品国精品久久99热一| 在线免费观看av片| 亚洲一线二线三线久久久| 91网站免费视频| 国产综合色精品一区二区三区| 男女激情无遮挡| 99久久视频| 免费久久99精品国产自| 国产精品1区| 国产成人精品在线| 91www在线| 亚洲欧美激情四射在线日| 99国产精品久久久久久久成人 | 国产精品天干天干在观线| 久久久无码人妻精品无码| 毛片一区二区| 成人性生活视频免费看| 婷婷亚洲五月| 日本婷婷久久久久久久久一区二区| 日韩一区二区三区精品视频第3页| 欧美在线欧美在线| 美女91在线| 日韩在线免费视频| 精品99又大又爽又硬少妇毛片 | 91网免费观看| 欧美天堂一区二区| 日韩av免费在线观看| 国产美女一区视频| 久久久精品国产网站| 69av亚洲| 这里精品视频免费| 每日更新在线观看av| 日韩你懂的在线播放| 在线视频 中文字幕| 在线视频国产一区| 亚洲第一在线播放| 天天综合日日夜夜精品| 久久久美女视频| 亚洲三级在线免费| 情侣偷拍对白清晰饥渴难耐| 国产精品日产欧美久久久久| 亚洲专区区免费| 99久久夜色精品国产网站| 五月天丁香社区| 国产精品影视天天线| 日韩欧美亚洲另类| 激情图区综合网| 尤物国产在线观看| 久久精品国产精品亚洲综合| 亚洲精品高清无码视频| 老司机精品视频网站| 噜噜噜久久亚洲精品国产品麻豆| 亚洲国产高清一区| 大陆av在线播放| 亚洲国产激情| 日本网站免费在线观看| 亚洲人成毛片在线播放女女| 无码粉嫩虎白一线天在线观看| 亚洲视频狠狠| 97超碰在线人人| 99国内精品| 无码aⅴ精品一区二区三区浪潮 | 国产黄色片在线播放| 亚洲欧洲日韩国产| jizz亚洲| 久久韩剧网电视剧| 在线电影福利片| 欧美激情视频一区二区三区不卡| 国产网红女主播精品视频| 久久99精品久久久久久琪琪| 国产色婷婷在线| 91国内产香蕉| 自拍偷自拍亚洲精品被多人伦好爽 | 黄色录像二级片| 一区二区在线免费| 97人人澡人人爽人人模亚洲| 日韩欧美主播在线| 这里只有精品9| 日韩网站在线看片你懂的| 国产激情视频在线播放| 亚洲精品国产综合久久| 成人在线二区| 欧美大奶子在线| 国产拍在线视频| 国产免费亚洲高清| 日韩在线观看中文字幕| 精品久久久三级| 成人一区二区| www国产免费| 亚洲尤物精选| 午夜福利123| 91欧美激情一区二区三区成人| 少妇精品无码一区二区免费视频| 亚洲天堂免费在线观看视频| 国产在线视频99| 欧美自拍偷拍一区| www.av网站| 亚洲人成在线一二| 国产探花视频在线观看| 日本中文字幕成人| 国产美女亚洲精品7777| 精品在线不卡| 亚洲欧美综合久久久| www黄色av| 国产精品小仙女| 色欲AV无码精品一区二区久久| 亚洲最新在线观看| 久久午夜鲁丝片| 亚洲国产精品人久久电影| www.91在线| 98视频在线噜噜噜国产| 91精品影视| 国产一区二区免费在线观看| 久久国产成人精品| 日本成人在线免费视频| 成人深夜视频在线观看| 国产天堂av在线| 在线区一区二视频| 熟妇人妻系列aⅴ无码专区友真希| 中文字幕一区日韩电影| 黑森林国产精品av| 999视频在线免费观看| 日韩伦理一区| 粉嫩虎白女毛片人体| 99久久综合狠狠综合久久| 粉嫩av性色av蜜臀av网站| 欧美影视一区二区三区| 三级在线观看| 午夜精品一区二区三区在线视| 青草伊人久久| 国产精品亚洲天堂| 蜜桃久久av一区| 亚洲精品91在线| 日本道免费精品一区二区三区| 桃花色综合影院| 96精品视频在线| 天堂日韩电影| 男人天堂网视频| 91蜜桃在线免费视频| 成年人午夜视频| 亚洲第一网站男人都懂| 欧美野外wwwxxx| 999国产视频| 欧美日韩视频| 黄页网站在线看| 一区二区视频在线看| 国产日韩欧美视频在线观看| 日韩最新av在线| 欧美成人xxxx| 在线码字幕一区| 精品一区二区三区在线观看国产| 日本女人性生活视频| 欧美日韩电影在线播放| 日本在线播放| 91在线视频一区| 中文字幕av亚洲精品一部二部| 91精产国品一二三产区别沈先生| 中文字幕一区二区三区四区| 97人妻精品一区二区三区软件| 色噜噜狠狠狠综合曰曰曰88av| 性欧美video另类hd尤物| 夜夜爽www精品| 国产一区二区福利| 久久久久亚洲av片无码下载蜜桃 | 国产亚洲精品成人a| 亚洲午夜久久久久久久久电影网 | 一区二区乱子伦在线播放| 亚洲最新视频在线| 日韩综合av| 人妻互换免费中文字幕| thepron国产精品| www.com亚洲| 日韩中文娱乐网| 欧美一级大片在线视频| 无码粉嫩虎白一线天在线观看 | 热舞福利精品大尺度视频| 老司机精品福利视频| 2014亚洲天堂| 亚洲成人动漫在线播放| 日日av拍夜夜添久久免费| 日本黄色播放器| 成人免费视频一区| 日本视频免费观看| 久久精品成人欧美大片古装| 午夜视频一区二区在线观看| 男女超爽视频免费播放| 国产网站一区二区三区| 国产欧美久久久| 欧美又大又粗又长| 色男人天堂综合再现| 国产伦精品一区二区三区88av| 91国内精品野花午夜精品| www.久久ai| 欧美二区在线| 国产精品影视天天线| 探花视频在线观看| 久久福利视频导航| 少妇精品久久久一区二区三区| 涩涩网站在线看| 欧美性猛交xxxx免费看久久久| 午夜视频在线观看免费视频| 国产精品免费一区二区| 蜜桃一区二区三区在线| 国产一级一片免费播放放a| 国产亚洲激情在线| 草莓视频一区二区三区| 亚洲性图一区二区| 亚洲mv大片欧洲mv大片精品| 色欧美激情视频在线| 欧美日韩国产精品一卡| 国产成人在线电影| 一级黄色大片免费| 欧美做爰性生交视频|