關注前端社區的同窗,必定知道vue。一個小巧、優雅 mvvm 框架。 目前是1.0.3正式版,而後中文文檔還沒更新上來。 使用了一段時間的感觸就是,我不再想直接操做DOM了。數據綁定式的編程體驗真是好。實現的一個分頁組件。css
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 .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="showFirst"><a v-on:click="cur--">上一頁</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="showLast"><a v-on:click="cur++">下一頁</a></li> <li><a>共<i>{{all}}</i>頁</a></li> </ul> </div>
在未引入js前,頁面的顯示,分析下,all字段簡單直接輸出便可,{{index}}是分頁碼這個須要一些動態的渲染。html
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>= 11){ if(this.cur > 5 && this.cur < this.all-4){ left = this.cur - 5 right = this.cur + 4 }else{ if(this.cur<=5){ left = 1 right = 10 }else{ right = this.all left = this.all -9 } } } while (left <= right){ ar.push(left) left ++ } return ar }, showLast: function(){ if(this.cur == this.all){ return false } return true }, showFirst: function(){ if(this.cur == 1){ return false } return true }
ok這個頁碼顯示規則是參考Baidu搜尋的 返回值就是[2,3,4,5,6]之類。
有了角標還需判斷前一頁、下一頁的顯示.增長showLast和showFirst字段(bool)
觀看html模版發現v-if
指令.很明顯當內容是true就輸出,否就沒。
重點看下vue
<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字段git
methods: { btnClick: function(data){//頁碼點擊事件 if(data != this.cur){ this.cur = data } } }
組件寫完了,問題來了,用戶點擊發生頁面改變,你怎麼通知其餘組件做出相應的變化. 能夠在頁角發生改變的函數下,插一條語句通知其餘組件。不過這種方法是不好的作法。可使用github
watch: { cur: function(oldValue , newValue){ console.log(arguments) } }
觀察了cur數據當它改變的時候,能夠獲取先後值。而後通知其餘組件。編程
完整的代碼能夠看 github:vue-pagination框架