最近幾個項目用上vue了項目又剛好需要一個分頁的功能。于是百度發現幾篇文章介紹的實在方式有點復雜,沒耐心看自己動手寫了一個。
用js實現的分頁結果如圖所示:
css
.page-bar{ margin:40px;}ul,li{ margin: 0px; padding: 0px;}li{ list-style: none}.page-bar li:first-child>a { margin-left: 0px}.page-bar a{ border: 1px solid #ddd; text-decoration: none; position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.42857143; color: #337ab7; cursor: pointer}.page-bar a:hover{ background-color: #eee;}.page-bar a.banclick{ cursor:not-allowed;}.page-bar .active a{ color: #fff; cursor: default; background-color: #337ab7; border-color: #337ab7;}.page-bar i{ font-style:normal; color: #d44950; margin: 0px 4px; font-size: 12px;}
模版
<div class="page-bar"> <ul> <li v-if="cur>1"><a v-on:click="cur--,pageClick()">上一頁</a></li> <li v-if="cur==1"><a class="banclick">上一頁</a></li> <li v-for="index in indexs" v-bind:class="{ 'active': cur == index}"> <a v-on:click="btnClick(index)">{{ index }}</a> </li> <li v-if="cur!=all"><a v-on:click="cur++,pageClick()">下一頁</a></li> <li v-if="cur == all"><a class="banclick">下一頁</a></li> <li><a>共<i>{{all}}</i>頁</a></li> </ul></div>
js
var pageBar = new Vue({ el: '.page-bar', data: { all: 20, //總頁數 cur: 1,//當前頁碼});
調用 new Vue({參數}) 就是創建了一個基本的組件,賦值給變量 pageBar.
el就是element的縮寫,定位模版的位置.data就是數據了.
知道了總頁數但是要顯示頁碼還是要一番計算,所以顯示頁碼就是計算屬性了.
所以我們要用computed
computed: { indexs: function(){ var left = 1; var right = this.all; var ar = []; if(this.all>= 5){ if(this.cur > 3 && this.cur < this.all-2){ left = this.cur - 2 right = this.cur + 2 }else{ if(this.cur<=3){ left = 1 right = 5 }else{ right = this.all left = this.all -4 } } } while (left <= right){ ar.push(left) left ++ } return ar } }
看一下頁面顯示出來的循環:
<li v-for="index in indexs" v-bind:class="{ 'active': cur == index}"> <a v-on:click="btnClick(index)">{{ index }}</a> </li>
v-for是循環渲染輸出計算屬性indexs.每一次循環的子元素賦值給index v-bind:class綁定class,當渲染到目前的角標的時候加個class v-on:click是綁定了事件,我把index當參數傳進入了,后面做判斷,默認傳event事件.
然后我們給Vue的選項里面再增加methods字段
methods: { btnClick: function(data){//頁碼點擊事件 if(data != this.cur){ this.cur = data } }, pageClick: function(){ console.log('現在在'+this.cur+'頁'); } },
組件交互
組件寫完了,問題來了,用戶點擊發生頁面改變,你怎么通知其他組件作出相應的變化. 可以在頁角發生改變的函數下,插一條語句通知其他組件。不過這種方法是很差的做法。可以使用
watch: { cur: function(oldValue , newValue){ console.log(arguments); } }
觀察了cur數據當它改變的時候,可以獲取前后值。然后通知其他組件。
完整的代碼:
<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/><meta charset="utf-8"><title></title><meta name="keywords" content="" /><meta name="description" content="" /><script type="text/javascript" src="js/vue.min.js"></script><style>.page-bar{ margin:40px;}ul,li{ margin: 0px; padding: 0px;}li{ list-style: none}.page-bar li:first-child>a { margin-left: 0px}.page-bar a{ border: 1px solid #ddd; text-decoration: none; position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.42857143; color: #337ab7; cursor: pointer}.page-bar a:hover{ background-color: #eee;}.page-bar a.banclick{ cursor:not-allowed;}.page-bar .active a{ color: #fff; cursor: default; background-color: #337ab7; border-color: #337ab7;}.page-bar i{ font-style:normal; color: #d44950; margin: 0px 4px; font-size: 12px;}</style></head><body> <div class="page-bar"> <ul> <li v-if="cur>1"><a v-on:click="cur--,pageClick()">上一頁</a></li> <li v-if="cur==1"><a class="banclick">上一頁</a></li> <li v-for="index in indexs" v-bind:class="{ 'active': cur == index}"> <a v-on:click="btnClick(index)">{{ index }}</a> </li> <li v-if="cur!=all"><a v-on:click="cur++,pageClick()">下一頁</a></li> <li v-if="cur == all"><a class="banclick">下一頁</a></li> <li><a>共<i>{{all}}</i>頁</a></li> </ul></div><script type="text/javascript">var pageBar = new Vue({ el: '.page-bar', data: { all: 8, //總頁數 cur: 1//當前頁碼 }, watch: { cur: function(oldValue , newValue){ console.log(arguments); } }, methods: { btnClick: function(data){//頁碼點擊事件 if(data != this.cur){ this.cur = data } }, pageClick: function(){ console.log('現在在'+this.cur+'頁'); } }, computed: { indexs: function(){ var left = 1; var right = this.all; var ar = []; if(this.all>= 5){ if(this.cur > 3 && this.cur < this.all-2){ left = this.cur - 2 right = this.cur + 2 }else{ if(this.cur<=3){ left = 1 right = 5 }else{ right = this.all left = this.all -4 } } } while (left <= right){ ar.push(left) left ++ } return ar } }})</script></body></html>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答