欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

一個可復(fù)用的vue分頁組件

不廢話,先上組件文件pages.vue:

為烏蘭等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及烏蘭網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、烏蘭網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

<template>
 <div class="pages-box" v-if="pageTotal > 0">
  <ul class="pages">
   <li class="pages-prev">
    <a v-if="pageNow != 1" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="prevClick">上一頁</a>
   </li>
   <!--如果只有一頁就不顯示固定的第一個分頁按鈕了,避免重復(fù)-->
   <template v-if="pageTotal > 1">
    <li v-for="i in pageBegin" class="pages-li" :class="{active:i == pageNow}">
     <span v-if="i == pageNow" v-text="i"></span>
     <a v-else href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="pageClick" v-text="i"></a>
    </li>
   </template>
   <li v-if="ellipsis[0] > slider">
    <span>...</span>
   </li>
   <li v-for="i in pageMiddle" class="pages-li" :class="{active:i == pageNow}">
    <span v-if="i == pageNow" v-text="i"></span>
    <a v-else href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="pageClick" v-text="i"></a>
   </li>
   <li v-if="pageTotal - ellipsis[1] > slider">
    <span>...</span>
   </li>
   <li v-for="i in pageEnd" class="pages-li" :class="{active:i == pageNow}">
    <span v-if="i == pageNow" v-text="i"></span>
    <a v-else href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="pageClick" v-text="i"></a>
   </li>

   <li class="pages-next">
    <a v-if="pageNow != pageTotal" href="javascript:void(0);" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="nextClick">下一頁</a>
   </li>
  </ul>
 </div>
</template>

<script>
 export default{
  name: 'pages',
  props: {
   //總頁數(shù)
   total: {
    type: [Number, String],
    required: true
   },
   //當前頁
   now: {
    type: [Number, String],
    default: 1
   }
  },
  data() {
   return {
    //當前頁
    pageNow: this.now,
    //總頁數(shù)
    pageTotal: this.total,
    //輸入的頁碼
    pageNum: "",
    //顯示分頁按鈕的個數(shù)
    length: 8,
    //前后固定的分頁按鈕個數(shù)
    slider: 1
   }
  },
  watch: {
   total(val){
    let page_total = parseInt(val);
    page_total = (isNaN(page_total) || page_total < 1) ? 1 : page_total;
    this.pageTotal = page_total;
   },
   now(val){
    let page_now = parseInt(val);
    page_now = (isNaN(page_now) || this.pageTotal < 2 || page_now < 1) ? 1 : page_now;
    page_now = page_now > this.pageTotal ? this.pageTotal : page_now;
    this.pageNow = page_now;
   }
  },
  computed: {
   //前邊顯示固定分頁數(shù)
   pageBegin(){
    return Math.min(this.slider, this.ellipsis[0]);
   },
   //中間顯示分頁數(shù)
   pageMiddle(){
    let arr = [];
    for (let i = this.ellipsis[0] + 1; i <= this.ellipsis[1]; i++) {
     arr.push(i);
    }
    return arr;
   },
   //后邊顯示分頁數(shù)
   pageEnd(){
    let arr = [];
    for (let i = this.ellipsis[2] + 1; i <= this.pageTotal; i++) {
     arr.push(i);
    }
    return arr;
   },
   /**
    * 出現(xiàn)三個點時的分頁的范圍
    * @returns {*[]}
    * begin: 開始頁碼
    * end: 結(jié)束頁碼
    * end_max: 結(jié)束頁碼的最大值
    */
   ellipsis() {
    let end_max = this.pageTotal - this.slider;
    let begin = this.pageNow - (this.length / 2) + this.slider;
    begin = begin < 1 ? 1 : begin;
    let end = begin + this.length - 2 * this.slider;
    //當begin達到最小值后需要根據(jù)begin重新計算end以保證顯示的分頁按鈕個數(shù)不變
    end = begin < this.slider ? (end + this.slider - begin) : end;
    if (end >= end_max) {
     end = end_max;
     //當end達到最大值后需要根據(jù)end重新計算begin以保證顯示的分頁按鈕個數(shù)不變
     begin = (end - this.length + 2 * this.slider) < 1 ? 1 : (end - this.length + 2 * this.slider);
    }
    return [begin, end, end_max];
   }
  },
  methods: {
   //上一頁
   prevClick() {
    this.pageNow--;
    this.pageNow = this.pageNow < 1 ? 1 : this.pageNow;
    this.changePage(this.pageNow);
   },
   //下一頁
   nextClick() {
    this.pageNow++;
    this.pageNow = this.pageNow > this.pageTotal ? this.pageTotal : this.pageNow;
    this.changePage(this.pageNow);
   },
   //點擊頁碼
   pageClick(e) {
    this.pageNow = Number(e.target.innerText.trim());
    this.changePage(this.pageNow);
   },
   //輸入頁碼
   pageInput(e){
    let num = parseInt(e.target.innerText);
    if(isNaN(num)){
     this.pageNum = '';
     e.target.innerText = '';
    } else {
     this.pageNum = num;
     //e.target.innerText = num;
    }
   },
   //跳轉(zhuǎn)到輸入的頁碼
   goClick() {
    this.pageNum = this.pageNum < 1 ? 1 : this.pageNum;
    this.pageNum = this.pageNum > this.pageTotal ? this.pageTotal : this.pageNum;
    this.pageNow = this.pageNum;
    this.pageNum = "";
    this.changePage(this.pageNow);
   },
   // 切換分頁
   changePage(page){
    let {name, params, query} = this.$route;
    this.$router.push({
     name,
     params: Object.assign(params, {page}),
     query
    });
   }
  }
 }
</script>
<style lang="sass" type="text/scss" rel="stylesheet/scss">
 @import '../scss/base/variables';

 .pages-box{
  position: relative;
  padding: 5px 10px;
  margin: 20px 0;
  text-align: center;
 }

 .pages{
  display: inline-block;
  padding: 10px 0;
  &:after{
   content: "";
   display: table;
   line-height: 0;
   clear: both;
  }
  li{
   float: left;
   height: 20px;
   line-height: 20px;
   text-align: center;
   margin: 0 2px;
   box-sizing: border-box;
   font-size: 13px;
   span, a{
    display: block;
    width: 100%;
    height: 100%;
    padding: 0 2px;
    box-sizing: border-box;
   }
  }
  .pages-li{
   min-width: 30px;
   border: 1px solid $theme;
   color: $theme;
   a{
    color: $theme;
   }
   &.active{
    span{
     background: $theme;
     color: #fff;
    }
   }
  }
  .pages-prev, .pages-next{
   padding: 0 8px;
   font-size: 12px;
   a{
    display: block;
    height: 100%;
    position: relative;
    color: $theme;
    &:before{
     content: '';
     position: absolute;
     top: 50%;
     display: block;
     width: 6px;
     height: 6px;margin-top:-4px;
     border-left: 1px solid $theme;
     border-top: 1px solid $theme;
    }
   }
  }
  .pages-prev a{
   padding-left: 8px;
   &:before{
    transform:rotate(-45deg);
    left: 0;
   }
  }
  .pages-next a{
   padding-right: 8px;
   &:before{
    transform:rotate(135deg);
    right: 0;
   }
  }
  .pages-num{
   .num-input{
    min-width: 20px;
    height: 20px;
    padding: 0 5px;
    line-height: 20px;
    border-radius: 2px;
    border: 1px solid $theme;
    color: $theme;
    text-align: center;
    outline: none;
   }
  }
  .pages-go{
   a{
    color: $theme;
   }
   span{
    color: #666;
   }
  }
 }
</style>

使用方法:

在需要分頁的地方使用分頁組件標簽,比如這里的order.vue:

<!--分頁組件-->
<pages :now="page" :total="totalPage" v-if="totalPage > 0"></pages>

在data中設(shè)置當前頁和總頁面的默認值

data(){
    return {
      totalPage:1,
      page:1,
        }
    },

考慮一下我們希望我們點擊頁數(shù)按鈕后發(fā)生什么

首先,點擊某頁數(shù)時路由會改變頁數(shù),從路由獲取當前頁

this.page = this.$route.params.page;

接著,我們希望有一個getorderfromServer方法將當前頁數(shù)發(fā)送給服務(wù)器,再將返回的數(shù)據(jù)更新在頁面上

getorderfromServer({
          currentPage:this.page
        })

最后調(diào)用的方法:

methods: {
      // 查詢?nèi)坑唵?      getorderfromServer(){
        this.loading = true;
        this.page = this.$route.params.page;
        getorderfromServer({
          currentPage: this.page,
          orderTimeStart:this.orderTimeStart,
          orderTimeEnd:this.orderTimeEnd,
          serviceName:this.serviceName,
          shopName:this.shopName,
          status: this.status
        }).then(({code, data}) => {
          if (code == 200) {
            this.Orderlist = data.list;
            this.totalPage = data.totalPage;
          }
          this.loading = false;
        }).catch(err => {
          this.tip('服務(wù)內(nèi)部錯誤', 'error');
          this.Orderlist = {};
          this.loading = false;
        });
      },
    }

注意通過路由對方法作出響應(yīng),每次路由改變都調(diào)用此方法以更新頁面

watch: {
      $route: 'getorderfromServer'
    }

還要對路由信息進行改造,讓每一頁(尤其是第一頁)都有路由頁數(shù)信息,可以對第一頁進行重定向以達到目的:

{
  path: 'order',
  redirect: 'order/page/1',
},
{
  path: 'order/page/:page',
  component(resolve){
    require.ensure([], function (require) {
      resolve(require('../modules/personal/order/myorder.vue'));
    }, 'modules/personal')
  },
  name:'order',
  meta: {
    login: 'none'
  }
},

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當前標題:一個可復(fù)用的vue分頁組件
當前網(wǎng)址:http://chinadenli.net/article38/gpcdpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、服務(wù)器托管、網(wǎng)站導(dǎo)航用戶體驗、定制網(wǎng)站域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
国产成人精品一区二区三区| 精品少妇一区二区视频| 日韩精品一区二区毛片| 国产日韩在线一二三区| 国产成人精品午夜福利| 欧美一级不卡视频在线观看| 亚洲国产天堂av成人在线播放| 婷婷九月在线中文字幕| 人妻亚洲一区二区三区| 69老司机精品视频在线观看| 大尺度激情福利视频在线观看| 护士又紧又深又湿又爽的视频| 国产av精品一区二区| 国产成人精品视频一区二区三区 | 国产女同精品一区二区| 欧美午夜伦理在线观看| 国产精品免费视频久久| 在线观看视频国产你懂的| 日本成人中文字幕一区| 香蕉尹人视频在线精品| 成年人免费看国产视频| 欧美成人精品一区二区久久| 中文字幕人妻日本一区二区| 日本妇女高清一区二区三区| 国内自拍偷拍福利视频| 日韩三级黄色大片免费观看| 日本加勒比系列在线播放| 欧美大胆美女a级视频| 黑色丝袜脚足国产一区二区| 欧美区一区二区在线观看| 最新国产欧美精品91| 欧美乱妇日本乱码特黄大片| 午夜视频免费观看成人| 亚洲中文字幕人妻av| 午夜精品成年人免费视频| 亚洲精品小视频在线观看| 久久碰国产一区二区三区| 欧美高潮喷吹一区二区| 欧美午夜伦理在线观看| 亚洲成人免费天堂诱惑| 国产精品欧美一区二区三区|