vue入門-實現一個分頁組件(1.0.3版本)

vue

關注前端社區的同窗,必定知道vue。一個小巧、優雅 mvvm 框架。 目前是1.0.3正式版,而後中文文檔還沒更新上來。 使用了一段時間的感觸就是,我不再想直接操做DOM了。數據綁定式的編程體驗真是好。實現的一個分頁組件。css

圖片描述

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

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>= 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框架

相關文章
相關標籤/搜索