国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue2.0實現分頁組件的實例代碼

2019-11-19 16:17:18
字體:
來源:轉載
供稿:網友

最近使用vue2.0重構項目, 需要實現一個分頁的表格, 沒有找到合適的分頁組件, 就自己寫了一個, 效果如下:

該項目是使用 vue-cli搭建的, 如果你的項目中沒有使用webpack,請根據代碼自己調整:

首先新建pagination.vue文件, 所有組件的代碼都寫在這里, 寫這樣的組件并沒有什么太大的難度, 主要是解決父子組件之間值傳遞的問題

<template> <nav>  <ul class="pagination">   <li :class="{'disabled': current == 1}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(current - 1)"> « </a></li>   <li :class="{'disabled': current == 1}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(1)"> 首頁 </a></li>   <li v-for="p in grouplist" :class="{'active': current == p.val}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow"                                      @click="setCurrent(p.val)"> {{ p.text }} </a>   </li>   <li :class="{'disabled': current == page}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(page)"> 尾頁 </a></li>   <li :class="{'disabled': current == page}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(current + 1)"> »</a></li>  </ul> </nav></template><script type="es6"> export default{  data(){   return {    current: this.currentPage   }  },  props: {   total: {// 數據總條數    type: Number,    default: 0   },   display: {// 每頁顯示條數    type: Number,    default: 10   },   currentPage: {// 當前頁碼    type: Number,    default: 1   },   pagegroup: {// 分頁條數    type: Number,    default: 5,    coerce: function (v) {     v = v > 0 ? v : 5;     return v % 2 === 1 ? v : v + 1;    }   }  },  computed: {   page: function () { // 總頁數    return Math.ceil(this.total / this.display);   },   grouplist: function () { // 獲取分頁頁碼    var len = this.page, temp = [], list = [], count = Math.floor(this.pagegroup / 2), center = this.current;    if (len <= this.pagegroup) {     while (len--) {      temp.push({text: this.page - len, val: this.page - len});     }     ;     return temp;    }    while (len--) {     temp.push(this.page - len);    }    ;    var idx = temp.indexOf(center);    (idx < count) && ( center = center + count - idx);    (this.current > this.page - count) && ( center = this.page - count);    temp = temp.splice(center - count - 1, this.pagegroup);    do {     var t = temp.shift();     list.push({      text: t,      val: t     });    } while (temp.length);    if (this.page > this.pagegroup) {     (this.current > count + 1) && list.unshift({text: '...', val: list[0].val - 1});     (this.current < this.page - count) && list.push({text: '...', val: list[list.length - 1].val + 1});    }    return list;   }  },  methods: {   setCurrent: function (idx) {    if (this.current != idx && idx > 0 && idx < this.page + 1) {     this.current = idx;     this.$emit('pagechange', this.current);    }   }  } }</script><style lang="less"> .pagination {  overflow: hidden;  display: table;  margin: 0 auto;  /*width: 100%;*/  height: 50px; li {  float: left;  height: 30px;  border-radius: 5px;  margin: 3px;  color: #666; & :hover {  background: #000; a {  color: #fff; } } a {  display: block;  width: 30px;  height: 30px;  text-align: center;  line-height: 30px;  font-size: 12px;  border-radius: 5px;  text-decoration: none } } .active {  background: #000; a {  color: #fff; } } }</style>

使用時, 在父組件中引入, 代碼如下:

<template>
        <v-pagination :total="total" :current-page='current' @pagechange="pagechange"></v-pagination>
</template>
<script type="es6">
  import pagination from '@/components/common/pagination/pagination'
export default{
    data(){
 return {
        total: 150,     // 記錄總條數
        display: 10,   // 每頁顯示條數
        current: 1,   // 當前的頁數
},
 methods: {
     pagechange:function(currentPage){
       console.log(currentPage);
       // ajax請求, 向后臺發送 currentPage, 來獲取對應的數據
     }
   },
components: {
      'v-pagination': pagination,
    }
}
</script>

至此, 一個基于 vue2.0 的分頁組件就完成了

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 唐海县| 沅陵县| 博爱县| 勃利县| 木里| 城口县| 南投市| 海口市| 塔河县| 广元市| 蛟河市| 都匀市| 隆昌县| 龙胜| 禄丰县| 乳山市| 安达市| 丹江口市| 龙南县| 宝兴县| 横峰县| 灵璧县| 玉环县| 松桃| 分宜县| 托里县| 东乡| 武平县| 海兴县| 海淀区| 海林市| 洪泽县| 林口县| 康乐县| 泸溪县| 白城市| 蒙山县| 东光县| 台山市| 玉林市| 株洲县|