欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Vue如何封裝分頁組件

 更新時間:2016年12月16日 10:27:53   作者:天碼行空  
使用Vue做雙向綁定的時候,可能經(jīng)常會用到分頁功能,接下來通過本文給大家分享一個封裝分頁組件的方法,一起看看吧

使用Vue做雙向綁定的時候,可能經(jīng)常會用到分頁功能

接下來我們來封裝一個分頁組件

先定義樣式文件 pagination.css

ul, li {
  margin: 0px;
  padding: 0px;
}
.page-bar {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.page-button-disabled {
  color:#ddd !important;
}
.page-bar li {
  list-style: none;
  display: inline-block;
}
.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;
}

js文件 pagination.js

(function (vue) {
  // html模板信息
  var template = '<div class="page-bar"> \
           <ul> \
            <li><a class="{{ setButtonClass(0) }}" v-on:click="prvePage(cur)">上一頁</a></li> \
            <li v-for="index in indexs" v-bind:class="{ active: cur == index }"> \
             <a v-on:click="btnClick(index)">{{ index < 1 ? "..." : index }}</a> \
            </li> \
            <li><a class="{{ setButtonClass(1) }}" v-on:click="nextPage(cur)">下一頁</a></li> \
           </ul> \
          </div>'
  var pagination = vue.extend({
    template: template,
    props: ['cur', 'all'],
    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++
        }
        if (ar[0] > 1) {
          ar[0] = 1;
          ar[1] = -1;
        }
        if (ar[ar.length - 1] < this.all) {
          ar[ar.length - 1] = this.all;
          ar[ar.length - 2] = 0;
        }
        return ar
      }
    },
    methods: {
      // 頁碼點擊事件
      btnClick: function (data) {
        if (data < 1) return;
        if (data != this.cur) {
          this.cur = data
          this.$dispatch('btn-click', data)
        }
      },
      // 下一頁
      nextPage: function (data) {
        if (this.cur >= this.all) return;
        this.btnClick(this.cur + 1);
      },
      // 上一頁
      prvePage: function (data) {
        if (this.cur <= 1) return;
        this.btnClick(this.cur - 1);
      },
      // 設(shè)置按鈕禁用樣式
      setButtonClass: function (isNextButton) {
        if (isNextButton) {
          return this.cur >= this.all ? "page-button-disabled" : ""
        }
        else {
          return this.cur <= 1 ? "page-button-disabled" : ""
        }
      }
    }
  })
  vue.Pagination = pagination
})(Vue)

pagination分頁組件就封裝好了,需要使用的時候,引入以上兩個文件即可

接下來我們測試下效果

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <title></title>
  <script src="vue.js"></script>
  <link href="pagination.css" rel="stylesheet" />
  <script src="pagination.js"></script>
</head>
<body>
  <div id="app">
    <vue-pagination :cur.sync="cur" :all.sync="all" v-on:btn-click="listen"></vue-pagination>
    <p>{{msg}}</p>
  </div>
  <script type="text/javascript">
    var app = new Vue({
      el: '#app',
      data: {
        // 當前頁碼
        cur: 1,
        // 總頁數(shù)
        all: 100,
        msg: ''
      },
      components: {
        // 引用組件
        'vue-pagination': Vue.Pagination
      },
      methods: {
        listen: function (data) {
          // 翻頁會觸發(fā)此事件
          this.msg = '當前頁碼:' + data
        }
      }
    })
  </script>
</body>
</html>

最終效果

頁碼切換事件在listen中處理即可

點擊此處下載源碼:源碼下載地址

以上所述是小編給大家介紹的基于Vue如何封裝分頁組件,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue項目中token驗證登錄(前端部分)

    Vue項目中token驗證登錄(前端部分)

    這篇文章主要為大家詳細介紹了Vue項目中token驗證登錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue computed的set方法無效問題及解決

    vue computed的set方法無效問題及解決

    這篇文章主要介紹了vue computed的set方法無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue動態(tài)繪制四分之三圓環(huán)圖效果

    vue動態(tài)繪制四分之三圓環(huán)圖效果

    這篇文章主要介紹了vue動態(tài)繪制四分之三圓環(huán)圖效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • vue中實現(xiàn)可編輯table及其中加入下拉選項

    vue中實現(xiàn)可編輯table及其中加入下拉選項

    這篇文章主要介紹了vue中實現(xiàn)可編輯table及其中加入下拉選項,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue.config.js配置proxy代理產(chǎn)生404錯誤的原因及解決

    vue.config.js配置proxy代理產(chǎn)生404錯誤的原因及解決

    這篇文章主要介紹了vue.config.js配置proxy代理產(chǎn)生404錯誤的原因及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue子傳父關(guān)于.sync與$emit的實現(xiàn)

    vue子傳父關(guān)于.sync與$emit的實現(xiàn)

    這篇文章主要介紹了vue子傳父關(guān)于.sync與$emit的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • vue實現(xiàn)記事本小功能

    vue實現(xiàn)記事本小功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)記事本小功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • VUE前端實現(xiàn)token的無感刷新方式

    VUE前端實現(xiàn)token的無感刷新方式

    這篇文章主要介紹了VUE前端實現(xiàn)token的無感刷新方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue + any-touch實現(xiàn)一個iscroll 實現(xiàn)拖拽和滑動動畫效果

    vue + any-touch實現(xiàn)一個iscroll 實現(xiàn)拖拽和滑動動畫效果

    這篇文章主要介紹了vue + any-touch實現(xiàn)一個iscroll實現(xiàn)拖拽和滑動動畫效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • vue前端開發(fā)keepAlive使用詳解

    vue前端開發(fā)keepAlive使用詳解

    在開發(fā)中經(jīng)常有從列表跳到詳情頁,然后返回詳情頁的時候需要緩存列表頁的狀態(tài)(比如滾動位置信息),這個時候就需要保存狀態(tài),要緩存狀態(tài)
    2021-10-10

最新評論