国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 Vue.js Vue組件實戰(zhàn):分頁組件開發(fā)

Vue組件實戰(zhàn):分頁組件開發(fā)

Nov 24, 2023 am 08:56 AM
vue 組件 分頁

Vue組件實戰(zhàn):分頁組件開發(fā)

Vue元件實戰(zhàn):分頁元件開發(fā)

介紹

在網(wǎng)路應(yīng)用程式中,分頁功能是不可或缺的一個元件。一個好的分頁元件應(yīng)該展示簡潔明了,功能豐富,而且易於整合和使用。

在本文中,我們將介紹如何使用Vue.js框架來開發(fā)一個高度可自訂化的分頁元件。我們將透過程式碼範(fàn)例來詳細(xì)說明如何使用Vue元件開發(fā)。

技術(shù)堆疊

  • Vue.js 2.x
  • JavaScript (ES6)
  • HTML5與CSS3

#開發(fā)環(huán)境

  • Node.js v8.9.3
  • npm v5.5.1
  • Vue.js v2.5.2

#分頁元件需求

  • 透過props接收總頁面數(shù)(total)和目前頁數(shù)(current)屬性
  • 可以設(shè)定顯示的最大頁碼數(shù)(maxShown)
  • 可以配置按鈕顯示的文字(prevText和nextText) 和按鈕樣式
  • 點擊頁碼可以切換到對應(yīng)的頁面
  • 目前頁碼高亮顯示
  • 目前頁面沒有前一頁時,忽略上一頁按鈕的點擊事件
  • 當(dāng)前頁面沒有後一頁時,忽略下一頁按鈕的點擊事件

設(shè)計思路和程式碼實作

根據(jù)需求,我們將分頁元件拆分為多個小元件來實現(xiàn)。我們需要建立以下3個小元件:

  1. Pagination.vue

#主頁元件,負(fù)責(zé)分頁資料和邏輯的處理。向子元件傳遞分頁訊息和回應(yīng)子元件的事件。

  1. Button.vue

此元件為按鈕元件,用於建立分頁按鈕。

  1. Page.vue

此元件用於建立單一頁面區(qū)塊,包含頁標(biāo)號和狀態(tài)。頁面區(qū)塊可以是目前頁面或非目前頁面。

接下來,讓我們使用程式碼來實作以上3個元件。

  1. Pagination.vue
<template>
  <div class="pagination-container">
    <button-prev :current="current" @onPrev="prev"></button-prev>
    <page v-for="page in pages"
      :key="page"
      :page="page"
      :is-selected="page === current"
      @on-page-selected="selectPage"></page>
    <button-next :current="current" :total="total" @onNext="next"></button-next>
  </div>
</template>
<script>
import ButtonPrev from './ButtonPrev.vue';
import ButtonNext from './ButtonNext.vue';
import Page from './Page.vue';

export default {
  components: { ButtonPrev, ButtonNext, Page },
  props: {
    total: {
      type: Number,
      default: 10
    },
    current: {
      type: Number,
      default: 1
    },
    maxShown: {
      type: Number,
      default: 5
    },
    prevText: {
      type: String,
      default: '上一頁'
    },
    nextText: {
      type: String,
      default: '下一頁'
    }
  },
  computed: {
    pages () {
      const start = Math.max(1, this.current - Math.floor(this.maxShown / 2));
      const end = Math.min(this.total, start + this.maxShown - 1);
      return Array.from({ length: end - start + 1 }, (v, k) => start + k);
    }
  },
  methods: {
    selectPage (page) {
      if (this.current === page) return;
      this.current = page;
      this.$emit('onPageChanged', page);
    },
    prev () {
      if (this.current > 1) {
        this.selectPage(this.current - 1);
      }
    },
    next () {
      if (this.current < this.total) {
        this.selectPage(this.current + 1);
      }
    }
  }
}
</script>

在上面的程式碼中,我們首先import了ButtonPrev、ButtonNext和Page元件。接著,用props方式取得了total, current, maxShown, prevText和nextText屬性,並定義了計算屬性pages,根據(jù)當(dāng)前頁碼(current)和最大頁碼數(shù)(maxShown)得到一個包含頁碼數(shù)的數(shù)組,以在組件中呈現(xiàn)。

我們也定義了selectPage方法,在該方法中,如果頁碼(page)與目前頁碼(current)相同,則傳回或不做任何事情。否則,將新頁碼發(fā)出給父元件。

prev()和next()方法用於處理上一頁和下一頁事件,並防止event被回應(yīng)。

  1. ButtonPrev.vue
<template>
    <button
      class="btn-previous"
      :disabled="current === 1"
      @click="onPrev()">
      {{ prevText }}
    </button>
</template>

<script>
export default {
  props: {
    prevText: {
      type: String,
      default: '上一頁'
    },
    current: {
      type: Number,
      default: 1
    }
  },
  methods: {
    onPrev () {
      this.$emit('onPrev');
    }
  }
}
</script>

<style scoped>
.btn-previous {
  border: none;
  color: #333;
  display: inline-block;
  font-size: 16px;
  padding: 6px 12px;
  margin-right: 5px;
  background-color:#fff;
  cursor: pointer;
  border-radius: 2px;
  box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
}
.btn-previous:disabled {
  color: #ccc;
  cursor: default;
}
</style>

在上述程式碼中,我們首先透過props取得了目前頁碼(current)和上一頁按鈕的文字(prevText)屬性。在模版中,使用類別綁定(disabled)控制按鈕使用狀態(tài)。定義了一個onPrev方法,該方法觸發(fā)父組件的onPrev事件。

  1. ButtonNext.vue
<template>
    <button
      class="btn-next"
      :disabled="current === total"
      @click="onNext()">
      {{ nextText }}
    </button>
</template>

<script>
export default {
  props: {
    total: {
      type: Number,
      default: 10
    },
    nextText: {
      type: String,
      default: '下一頁'
    },
    current: {
      type: Number,
      default: 1
    }
  },
  methods: {
    onNext () {
      this.$emit('onNext');
    }
  }
}
</script>

<style scoped>
.btn-next {
  border: none;
  color: #333;
  display: inline-block;
  font-size: 16px;
  padding: 6px 12px;
  margin-left: 5px;
  background-color: #fff;
  cursor: pointer;
  border-radius: 2px;
  box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
}
.btn-next:disabled {
  color: #ccc;
  cursor: default;
}
</style>

在上述程式碼中,我們將ButtonPrev.vue的程式碼複製了一份,稍微改了一下文字和判斷條件。

  1. Page.vue
<template>
  <button :class="{ current: isSelected }" class="btn-page" @click="onPageSelected(page)">
    {{ page }}
  </button>
</template>

<script>
export default {
  props: {
    page: {
      type: Number,
      required: true
    },
    isSelected: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    onPageSelected () {
      this.$emit('onPageSelected', this.page);
    }
  }
}
</script>

<style scoped>
.btn-page {
  border: none;
  color: #333;
  display: inline-block;
  font-size: 16px;
  padding: 6px 12px;
  margin-left: 5px;
  background-color: #fff;
  cursor: pointer;
  border-radius: 2px;
  box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
}
.btn-page.current {
  background-color: #0078d7;
  color: #fff;
}
</style>

在上述程式碼中,我們透過props取得了該頁碼的值(page)和按鈕的isSelected屬性。在模板中,使用類別綁定("current")高亮顯示選取的頁面。

我們也定義了一個onPageSelected方法,該方法會觸發(fā)父元件的onPageSelected事件。

最後,這些元件可以在任何Vue.js應(yīng)用程式中的template中使用,如下所示:

<template>
  <div>
    <pagination
      :total="total"
      :current="current"
      :maxShown="maxShown"
      :prevText="prevText"
      :nextText="nextText"
      @onPageChanged="onPageChanged"></pagination>
    <ul>
      <li v-for="(item, index) in items" :key="index">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
import Pagination from './Pagination.vue';

export default {
  components: {
    Pagination
  },
  data () {
    return {
      current: 1,
      maxShown: 10,
      prevText: '上一頁',
      nextText: '下一頁',
      total: 10,
      pageSize: 10,
      items: [{ name: 'Item 1' }, { name: 'Item 2' }, { name: 'Item 3' }]
    }
  },
  methods: {
    onPageChanged (page) {
      console.log('Page changed to: ', page);
      // 當(dāng)前頁面數(shù)據(jù)請求
    }
  }
}
</script>

上述程式碼中,我們引入了Pagination元件,並將其作為template中的父組件。我們也將total, current和maxShown綁定到元件,以便取得到它們的值。在onPageChanged方法中,我們可以處理頁面變更事件,並根據(jù)目前頁碼請求對應(yīng)的資料。

以上是Vue組件實戰(zhàn):分頁組件開發(fā)的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue怎麼給按鈕添加函數(shù) vue怎麼給按鈕添加函數(shù) Apr 08, 2025 am 08:51 AM

可以通過以下步驟為 Vue 按鈕添加函數(shù):將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數(shù)邏輯。

React與Vue:Netflix使用哪個框架? React與Vue:Netflix使用哪個框架? Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

Netflix的前端:React(或VUE)的示例和應(yīng)用 Netflix的前端:React(或VUE)的示例和應(yīng)用 Apr 16, 2025 am 12:08 AM

Netflix使用React作為其前端框架。 1)React的組件化開發(fā)模式和強大生態(tài)系統(tǒng)是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復(fù)雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優(yōu)化了渲染效率和用戶交互管理。

vue的div怎麼跳轉(zhuǎn) vue的div怎麼跳轉(zhuǎn) Apr 08, 2025 am 09:18 AM

Vue 中 div 元素跳轉(zhuǎn)的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監(jiān)聽器,調(diào)用 this.$router.push() 方法跳轉(zhuǎn)。

反應(yīng),vue和Netflix前端的未來 反應(yīng),vue和Netflix前端的未來 Apr 12, 2025 am 12:12 AM

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應(yīng)用的性能和開發(fā)效率。 2)Vue在Netflix的內(nèi)部工具和小型項目中應(yīng)用,其靈活性和易用性是關(guān)鍵。

vue怎麼a標(biāo)籤跳轉(zhuǎn) vue怎麼a標(biāo)籤跳轉(zhuǎn) Apr 08, 2025 am 09:24 AM

實現(xiàn) Vue 中 a 標(biāo)籤跳轉(zhuǎn)的方法包括:HTML 模板中使用 a 標(biāo)籤指定 href 屬性。使用 Vue 路由的 router-link 組件。使用 JavaScript 的 this.$router.push() 方法??赏ㄟ^ query 參數(shù)傳遞參數(shù),並在 router 選項中配置路由以進(jìn)行動態(tài)跳轉(zhuǎn)。

vue怎麼實現(xiàn)組件跳轉(zhuǎn) vue怎麼實現(xiàn)組件跳轉(zhuǎn) Apr 08, 2025 am 09:21 AM

Vue 中實現(xiàn)組件跳轉(zhuǎn)有以下方法:使用 router-link 和 &lt;router-view&gt; 組件進(jìn)行超鏈接跳轉(zhuǎn),指定 :to 屬性為目標(biāo)路徑。直接使用 &lt;router-view&gt; 組件顯示當(dāng)前路由渲染的組件。使用 router.push() 和 router.replace() 方法進(jìn)行程序化導(dǎo)航,前者保存歷史記錄,後者替換當(dāng)前路由不留記錄。

vue怎麼用函數(shù)截流 vue怎麼用函數(shù)截流 Apr 08, 2025 am 06:51 AM

Vue 中的函數(shù)截流是一種技術(shù),用於限制函數(shù)在指定時間段內(nèi)被調(diào)用的次數(shù),防止性能問題。實現(xiàn)方法為:導(dǎo)入 lodash 庫:import { debounce } from 'lodash';使用 debounce 函數(shù)創(chuàng)建截流函數(shù):const debouncedFunction = debounce(() =&gt; { / 邏輯 / }, 500);調(diào)用截流函數(shù),控制函數(shù)在 500 毫秒內(nèi)最多被調(diào)用一次。

See all articles