Vue.js實現(xiàn)一個自定義分頁組件vue-paginaiton
vue實現(xiàn)一個分頁組件vue-paginaiton
vue使用了一段時間的感觸就是,我再也不想直接操作DOM了。數(shù)據(jù)綁定式的編程體驗真是好。實現(xiàn)的一個分頁組件。
這里的css就不放出來了,可以看直接去github上下載:vue-pagination
先上一張實例圖吧
模版
<div class="page-bar"> <ul> <li v-if="showFirstText"><a v-on:click="cur--">上一頁</a></li> <li v-for = "index in pagenums"> <a v-on:click="pageChange(index)">{{index}}</a> </li> <li v-if="showNextText"><a v-on:click="cur++">下一頁</a></li> <li><a>共<i>{{all}}</i>頁</a></li> </ul> </div>
在未引入js前,頁面的顯示,分析下,all字段簡單直接輸出即可,{{index}}是分頁碼這個需要一些動態(tài)的渲染。
var app = new Vue({ el: '#app', data:{ currentpage: 1, totlepage: 28, visiblepage:10, msg: '' }, })
調(diào)用 new Vue({參數(shù)}) 就是創(chuàng)建了一個基本的組件,賦值給變量 app.el就是element的縮寫,定位模版的位置.data就是數(shù)據(jù)了.知道了總頁數(shù)但是要顯示頁碼還是要一番計算,所以顯示頁碼就是計算屬性了.所以我們要用computed
computed: { //計算屬性:返回頁碼數(shù)組,這里會自動進行臟檢查,不用$watch(); pagenums: function(){ //初始化前后頁邊界 var lowPage = 1; var highPage = this.totlepage; var pageArr = []; if(this.totlepage > this.visiblepage){//總頁數(shù)超過可見頁數(shù)時,進一步處理; var subVisiblePage = Math.ceil(this.visiblepage/2); if(this.currentpage > subVisiblePage && this.currentpage < this.totlepage - subVisiblePage +1){//處理正常的分頁 lowPage = this.currentpage - subVisiblePage; highPage = this.currentpage + subVisiblePage -1; }else if(this.currentpage <= subVisiblePage){//處理前幾頁的邏輯 lowPage = 1; highPage = this.visiblepage; }else{//處理后幾頁的邏輯 lowPage = this.totlepage - this.visiblepage + 1; highPage = this.totlepage; } } //確定了上下page邊界后,要準(zhǔn)備壓入數(shù)組中了 while(lowPage <= highPage){ pageArr.push(lowPage); lowPage ++; } return pageArr; } },
觀看html模版發(fā)現(xiàn)v-if指令.很明顯當(dāng)內(nèi)容是true就輸出,否就沒。
重點看下
<li v-for="index in pagenums" v-bind:class="{ active: currentpage == index}"> <a v-on:click="pageChange(index)">{{ index }}</a> </li>
v-for是循環(huán)渲染輸出計算屬性pagenums.每一次循環(huán)的子元素賦值給index v-bind:class綁定class,當(dāng)渲染到目前的角標(biāo)的時候加個class v-on:click是綁定了事件,我把index當(dāng)參數(shù)傳進入了,后面做判斷,默認(rèn)傳event事件.
然后我們Vue的選項里面再增加methods字段
methods:{ pageChange: function(page){ if (this.currentpage != page) { this.currentpage = page; this.$dispatch('page-change', page); //父子組件間的通信:==>子組件通過$diapatch(),分發(fā)事件,父組件冒泡通過v-on:page-change監(jiān)聽到相應(yīng)的事件; }; } }
組件交互
組件寫完了,問題來了,用戶點擊發(fā)生頁面改變,你怎么通知其他組件作出相應(yīng)的變化. 可以在頁角發(fā)生改變的函數(shù)下,插一條語句通知其他組件。不過這種方法是很差的做法??梢允褂?/p>
watch: { currentpage: function(oldValue , newValue){ console.log(arguments) } }
觀察了currentpage數(shù)據(jù)當(dāng)它改變的時候,可以獲取前后值。然后通知其他組件。
完整的代碼可以看 github:vue-pagination
本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。
關(guān)于vue.js組件的教程,請大家點擊專題vue.js組件學(xué)習(xí)教程進行學(xué)習(xí)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)掉vue插件Vetur格式化的時候自動添加的樣式操作
這篇文章主要介紹了關(guān)掉vue插件Vetur格式化的時候自動添加的樣式操作,文章圍繞主題展開操作過程,需要的小伙伴可以參考一下,希望對你有所幫助2022-05-05Vue實現(xiàn)點擊導(dǎo)航欄當(dāng)前標(biāo)簽后變色功能
這篇文章主要為大家詳細(xì)介紹了Vue實現(xiàn)點擊導(dǎo)航欄當(dāng)前標(biāo)簽后變色功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-08-08Vue3實現(xiàn)刷新頁面局部內(nèi)容的示例代碼
本文主要介紹了Vue3實現(xiàn)刷新頁面局部內(nèi)容的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Vue中this.$router.push參數(shù)獲取方法
下面小編就為大家分享一篇Vue中this.$router.push參數(shù)獲取方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02