溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Vue分頁(yè)組件如何封裝

發(fā)布時(shí)間:2022-07-06 09:53:15 來(lái)源:億速云 閱讀:193 作者:iii 欄目:開(kāi)發(fā)技術(shù)

今天小編給大家分享一下Vue分頁(yè)組件如何封裝的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

效果如圖

Vue分頁(yè)組件如何封裝

話不多說(shuō),直接上代碼

<template>
  <div class="pagination">
    <!-- 總頁(yè)數(shù) -->
    <div class="total">共{{ total }}條</div>
    <!-- 選擇每頁(yè)的條數(shù) -->
    <select name="" id="size_select" v-model="sizes" @change="sizeChange">
      <option v-for="item in pageSizes" :key="item" :value="item">
        {{ item }}條/頁(yè)
      </option>
    </select>
    <div class="pagenum">
      <!-- 上一頁(yè) -->
      <el-button
        icon="el-icon-arrow-left"
        :disabled="backDisabled"
        circle
        @click="back"
      ></el-button>
      <!-- 頁(yè)碼 -->
      <ul>
        <li
          :class="currentPage == item ? 'active' : ''"
          v-for="(item, index) in pagenum"
          :key="index"
          @click="toPage(item)"
        >
          {{ item }}
        </li>
      </ul>
      <!-- 下一頁(yè) -->
      <el-button
        icon="el-icon-arrow-right"
        :disabled="forwardDisabled"
        circle
        @click="forward"
      ></el-button>
    </div>
  </div>
</template>
 
<script>
export default {
  name: "pagination",
  props: {
    total: {  // 總數(shù)
      type: null,
      required: true,
    },
    pageSizes: { // 可選擇的每頁(yè)條數(shù)
      type: Array,
    },
    pageSize: {  // 每頁(yè)顯示的條數(shù)
      type: Number,
      required: true,
    },
    currentPage: { // 當(dāng)前頁(yè)
      type: Number,
      required: true,
    },
  },
  data() {
    return {
      sizes: this.pageSize,  // 接收props傳來(lái)的pageSize
      nowPage: this.currentPage,  // 接收props傳來(lái)的currentPage
    };
  },
  computed: {
    allPage() {  // 計(jì)算所有的頁(yè)數(shù)
      return Math.ceil(this.total / this.pageSize);
    },
    backDisabled() {  // 是否禁用上一頁(yè)
      return this.currentPage == 1;
    },
    forwardDisabled() { // 是否禁用下一頁(yè)
      return this.currentPage == this.allPage;
    },
    pagenum() {   // 計(jì)算顯示不同的頁(yè)
      if (this.allPage - this.nowPage > 6) {  //  
        if (this.nowPage > 6) {
          return [
            1,
            "...",
            this.nowPage - 2,
            this.nowPage - 1,
            this.nowPage,
            this.nowPage + 1,
            this.nowPage + 2,
            "...",
            this.allPage,
          ];
        } else {
          if (this.allPage > 8) {
            return [1, 2, 3, 4, 5, 6, "...", this.allPage];
          } else {
            return this.allPage;
          }
        }
      } else {
        if (this.nowPage < 6) {
          return this.allPage;
        } else {
          return [
            1,
            "...",
            this.allPage - 5,
            this.allPage - 4,
            this.allPage - 3,
            this.allPage - 2,
            this.allPage - 1,
            this.allPage,
          ];
        }
      }
    },
  },
  methods: {
    sizeChange() {  // 每頁(yè)限制條數(shù)改變觸發(fā)事件
      this.$emit("sizeChange", this.sizes);
    },
    forward() {  // 點(diǎn)擊下一頁(yè)
      this.$emit("currentChange", (this.nowPage += 1));
    },
    back() {  // 點(diǎn)擊上一頁(yè)
      this.$emit("currentChange", (this.nowPage -= 1));
    },
    toPage(val) {  // 點(diǎn)擊頁(yè)數(shù)
      if (val == "...") {
        console.log(2);
      } else {
        this.nowPage = val;
        this.$emit("currentChange", val);
      }
    },
  },
};
</script>

以上就是“Vue分頁(yè)組件如何封裝”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

vue
AI