最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于vue實(shí)現(xiàn)分頁組件的示例代碼

 更新時間:2023年08月01日 10:34:10   作者:如意呀  
分頁組件是一種用戶界面元素,用于在長列表或數(shù)據(jù)集中分割內(nèi)容,分頁組件是每個開發(fā)人員必須掌握的一個組件,廣泛應(yīng)用在各個場所,用以用戶方便閱讀等,本文就給大家介紹一下如何基于vue寫出的分頁組件,需要的朋友可以參考下

分頁組件是一種用戶界面元素,用于在長列表或數(shù)據(jù)集中分割內(nèi)容。它通常用于網(wǎng)頁、移動應(yīng)用或其他軟件界面中,以便用戶能夠按頁瀏覽內(nèi)容。 分頁組件是每個開發(fā)人員必須掌握的一個組件,廣泛應(yīng)用在各個場所。用以用戶方便閱讀等。

組件說明

變量顏色

@danger: #cc3600; 
@primary: #6b9eee; 
@words: #373737; 
@lightWords: #999; 
@warn: #dc6a12; 
@success: #7ebf50; 
@gray: #b4b8bc; 
@dark: #202020;
屬性名含義類型必填默認(rèn)值
current當(dāng)前頁碼Number1
total總數(shù)據(jù)量Number0
limit頁容量Number10
visibleNumber可見頁碼數(shù)Number10
事件名含義事件參數(shù)參數(shù)類型
pageChange頁碼變化新的頁碼Number

# 基本樣式

新建一個Page.vue,在template寫入基本模板,通過a標(biāo)簽(當(dāng)然也可以用其他的),寫出基本模板,同時加入點(diǎn)擊事件和css樣式和一些動態(tài)樣式,用:class來綁定動態(tài)css類,同時要注意,只有當(dāng)頁碼數(shù)大于一的時候才會用到這個組件,否則毫無意義,同時要注意,子組件不能更改父組件要用的數(shù)據(jù),以免出現(xiàn)錯誤

定義了一個active為加粗顏色,方便確定當(dāng)前位置,通過vfor根據(jù)生成的數(shù)組循環(huán)生成a標(biāo)簽

<template>
  <!-- //只有總頁數(shù)大于1的時候才會顯示,比較穩(wěn)定,選擇用vif否則沒有意義 -->
  <div class="pager-container" v-if="pageNumber > 1">
    <!-- 子組件無權(quán)更改數(shù)據(jù),在父組件中數(shù)據(jù)更改可能會影響到其他,所以子組件只能通過發(fā)出通知的形式告訴父組件 -->
    <!-- 點(diǎn)擊的時候調(diào)用h函數(shù),傳入適當(dāng)?shù)膮?shù),大返回就傳入第一頁,小返回就傳入當(dāng)前頁數(shù)-1 -->
    <!-- 注意a標(biāo)簽沒有href,如果寫上了就會存在重新加載頁面的問題 -->
    <a @click="handleClick(1)" :class="{ disabled: current === 1 }"
      >|&lt;&lt;</a
    >
    <a
      @click="handleClick(current - 1)"
      :class="{ disabled: current === 1 }"
      >&lt;&lt;</a
    >
    <!-- 循環(huán)生成的數(shù)組,設(shè)置唯一值,并且判斷添加active樣式(當(dāng)前頁是否為) -->
    <!-- 當(dāng)前頁是多少就傳入多少 -->
    <a
      @click="handleClick(tem)"
      v-for="(tem, i) in numbers"
      :key="i"
      :class="{ active: tem === current }"
      >{{tem}}</a
    >
    <a
      @click="handleClick(current + 1)"
      :class="{ disabled: current === pageNumber }"
      >&gt;&gt;</a
    >
    <a
      @click="handleClick(pageNumber)"
      :class="{ disabled: current === pageNumber }"
      >&gt;&gt;|</a
    >
  </div>
</template>

基本樣式設(shè)置(less)

<style lang="less" scoped>
@import "../styles/var.less";
.pager-container {
  display: flex;
  justify-content: center;
  margin: 20px 0;
  a {
    color: @primary;
    margin: 0 6px;
    cursor: pointer;
    &.disabled {
      color: @lightWords;
      cursor: not-allowed;
    }
    &.active {
      color: @words;
      font-weight: bold;
      cursor: text;
    }
  }
}
</style>

導(dǎo)出部分

計(jì)算屬性部分: 寫入了四個計(jì)算函數(shù),分別是pageNumber用來得到一共分成了多少頁(Math.ceil(this.total / this.limit); //總條數(shù)/每頁限制10條 得到頁數(shù))getMin(),getMax()得到當(dāng)前展示頁最大的那一個和最小那一個頁數(shù)

算方法:min()this.current - Math.floor(this.visibleNumber / 2);//當(dāng)前頁面減去最多顯示頁碼數(shù)的一半得到顯示最小的那個 max()this.getMin + this.visibleNumber - 1;最小值+當(dāng)前頁面最多顯示幾個頁碼-1得到最大的那個頁碼 numbers():通過構(gòu)建一個數(shù)組,對數(shù)組里面添加頁數(shù),通過for循環(huán)從最小到最大,往里面添加數(shù)字形成數(shù)組(注意:每次轉(zhuǎn)跳都會重新渲染頁面,所以min和max都會不斷變化,數(shù)組的值也會不斷變化)

方法部分methods部分:

handleClick(newPage)方法拋出事件并且通知父組件,因?yàn)?nbsp; 子組件無權(quán)更改數(shù)據(jù),在父組件中數(shù)據(jù)更改可能會影響到其他,所以子組件只能通過發(fā)出通知的形式告訴父組件

  • this.$emit 是 Vue 實(shí)例提供的方法,用于觸發(fā)自定義事件并通知父組件。
  • “pageChange” 是自定義事件的名稱,可以根據(jù)具體情況自定義命名。
  • newPage 是要傳遞給父組件的新頁碼數(shù)據(jù)。
  • 通過這段代碼,當(dāng)用戶點(diǎn)擊分頁組件的頁面導(dǎo)航按鈕時,會通過觸發(fā)自定義事件的方式通知父組件發(fā)生了頁碼的變化,父組件則可以根據(jù)新的頁碼進(jìn)行相應(yīng)的處理,例如重新加載對應(yīng)頁碼的數(shù)據(jù)或更新UI等。

props:部分:

<script>
export default {
  computed: {
    pageNumber: function () {
      return Math.ceil(this.total / this.limit); //總條數(shù)/每頁限制10條 得到頁數(shù)
    },
    getMax() {
      let max = this.getMin + this.visibleNumber - 1;
      if (max > this.pageNumber) {
        max = this.pageNumber;
      }
      return max;
    },
    getMin() {
      //得到顯示頁碼中最小的數(shù)字
      //當(dāng)前頁面減去最多顯示頁碼數(shù)的一半得到顯示最小的那個
      let min = this.current - Math.floor(this.visibleNumber / 2);
      if (min < 1) {
        min = 1;
      }
      return min;
    },
    numbers() {
      let arr = [];
      for (let i = this.getMin; i <= this.getMax; i++) {
        arr.push(i);
      }
      return arr;
    },
  },
  methods: {
    handleClick(newPage) {
      //如果新頁面小于1則賦值為1,大于最大的頁數(shù)則賦值為最大頁數(shù),等于當(dāng)前頁數(shù)直接return
      if (newPage < 1) {
        newPage = 1;
      }
      if (newPage > this.pageNumber) {
        newPage = this.pageNumber;
      }
      if (newPage === this.current) {
        return;
      }
      //拋出事件通知父組件
      //參數(shù):名字,數(shù)據(jù)
      this.$emit("pageChange", newPage);
    },
  },
  props: {
    current: {
      //當(dāng)前頁
      type: Number,
      default: 1,
    },
    total: {
      //總條數(shù)
      type: Number,
      default: 0,
    },
    limit: {
      //每頁展示多少條
      type: Number,
      default: 10,
    },
    // 最多顯示頁碼的個數(shù)
    visibleNumber: {
      type: Number,
      default: 10,
    },
  },
};
</script>

組件部分到此為止,接下里是導(dǎo)入部分

app.vue

import Pager from "./components/Page.vue"引入組件,并且通過 components: {Pager, },注冊組件

模板中寫入自定義的組件,通過total傳入總頁數(shù),current傳入當(dāng)前頁數(shù),點(diǎn)擊調(diào)用子組件拋出的事件交由父組件執(zhí)行,在methods:總定義了新的方法handlePageChange傳入新頁碼,讓當(dāng)前頁面變成新頁

最后data()方面?zhèn)魅肓嘶緮?shù)值

$event 是一個預(yù)留的特殊變量,用于傳遞事件對象或其他數(shù)據(jù)給事件處理函數(shù)。@pageChange 是監(jiān)聽自定義事件,當(dāng)自定義事件被觸發(fā)時,Vue 會自動將事件對象作為參數(shù)傳遞給事件處理函數(shù)。而 $event 則是用于接收這個事件對象的特殊變量。你可以自由選擇處理函數(shù)的形參名稱,例如這里使用了 $event,也可以使用其他名稱,如 event、e 等。

<template>
  <div>
    <Pager
      :total="total"
      :current="current"
      @pageChange="handlePageChange($event)"
    ></Pager>
  </div>
  <!-- <h1 v-if="score>=80">U</h1>
    <h2 v-else-if="score>=60">L</h2>
    <h3 v-else>X</h3> -->
  <!-- vif會添加和刪除元素,控制是否生成對應(yīng)的dom,而vshow始終都會生成dom用dom控制style:display:none,vif則是直接刪除元素 -->
  <!-- 使用vif可以有效的減少樹的節(jié)點(diǎn)和渲染量,但是也會導(dǎo)致樹的不穩(wěn)定,而vshow可以保持?jǐn)?shù)的穩(wěn)定,但不能減少樹的節(jié)點(diǎn)和渲染量 -->
  <!-- 因此,在實(shí)際開發(fā)中,顯示頻繁變化的情況下應(yīng)該用vshow,用以保持樹的穩(wěn)定,顯示狀態(tài)變化少的時候用vif,用以減少樹的節(jié)點(diǎn)和渲染量 -->
</template>
<script>
import Pager from "./components/Page.vue";
export default {
  components: {
    Pager,
  },
  methods: {
    handlePageChange(newPage) {
      this.current = newPage;
    },
  },
  data() {
    return {
      current: 1,
      total: 302,
    };
  },
};
</script>
<style scoped>
.iconfont {
  font-size: 90px;
  color: black;
}
</style>

總結(jié):

該組件中需要注意的部分 一是vif和vshow區(qū)別,這一是面試題??嫉?vif會添加和刪除元素,控制是否生成對應(yīng)的dom,而vshow始終都會生成dom用dom控制style:display:none,vif則是直接刪除元素 使用vif可以有效的減少樹的節(jié)點(diǎn)和渲染量,但是也會導(dǎo)致樹的不穩(wěn)定,而vshow可以保持?jǐn)?shù)的穩(wěn)定,但不能減少樹的節(jié)點(diǎn)和渲染量因此,在實(shí)際開發(fā)中,顯示頻繁變化的情況下應(yīng)該用vshow,用以保持樹的穩(wěn)定,顯示狀態(tài)變化少的時候用vif,用以減少樹的節(jié)點(diǎn)和渲染量 二是子組件無權(quán)更改數(shù)據(jù),在父組件中數(shù)據(jù)更改可能會影響到其他,所以子組件只能通過發(fā)出通知的形式告訴父組件,于是出現(xiàn)了子組件拋出事件通知父組件要進(jìn)行改變了,從而由父組件進(jìn)行改變,并且重新渲染dom。通過點(diǎn)擊調(diào)用handleClick(newPage)方法傳入新頁碼參數(shù),同時this.emit("pageChange",newPage);是Vue實(shí)例提供的方法,用于觸發(fā)自定義事件并通知父組件。 //參數(shù):名字,數(shù)據(jù)  拋出事件通知父組件還要注意這個特殊的預(yù)留變量 emit("pageChange", newPage);是 Vue 實(shí)例提供的方法,用于觸發(fā)自定義事件并通知父組件。 //參數(shù):名字,數(shù)據(jù)  拋出事件通知父組件 還要注意這個特殊的預(yù)留變量  emit("pageChange",newPage);是Vue實(shí)例提供的方法,用于觸發(fā)自定義事件并通知父組件。 //參數(shù):名字,數(shù)據(jù)  拋出事件通知父組件還要注意這個特殊的預(yù)留變量 event 是一個預(yù)留的特殊變量,用于傳遞事件對象或其他數(shù)據(jù)給事件處理函數(shù)。@pageChange 是監(jiān)聽自定義事件,當(dāng)自定義事件被觸發(fā)時,Vue 會自動將**事件對象作為參數(shù)傳遞給事件處理函數(shù)**。而 event‘ 則是用于接∗∗收這個事件對象的特殊變量∗∗。你可以自由選擇處理函數(shù)的形參名稱,例如這里使用了 ‘event` 則是用于接**收這個事件對象的特殊變量**。你可以自由選擇處理函數(shù)的形參名稱,例如這里使用了 `event‘ 則是用于接∗∗收這個事件對象的特殊變量∗∗。你可以自由選擇處理函數(shù)的形參名稱,例如這里使用了 ‘event,也可以使用其他名稱,如 event、e` 等。

以上就是基于vue實(shí)現(xiàn)分頁組件的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于vue實(shí)現(xiàn)分頁組件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue中i18n的安裝與幾種使用方式詳解

    vue中i18n的安裝與幾種使用方式詳解

    在一些網(wǎng)站經(jīng)常可以看到切換語言包,將網(wǎng)站轉(zhuǎn)化成多種語言版本的情況,下面這篇文章主要給大家介紹了關(guān)于vue中i18n的安裝與幾種使用方式的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 基于Vue3+西瓜視頻播放器(xgplayer)移動端直播解決方案

    基于Vue3+西瓜視頻播放器(xgplayer)移動端直播解決方案

    在現(xiàn)代前端開發(fā)中,視頻播放功能越來越常見,從在線教育到娛樂平臺都離不開高質(zhì)量的視頻播放器,這篇文章主要介紹了基于Vue3+西瓜視頻播放器(xgplayer)移動端直播的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • vue el-switch綁定數(shù)值時需要注意的問題

    vue el-switch綁定數(shù)值時需要注意的問題

    在Vue中使用`el-switch`組件時,綁定數(shù)值類型時應(yīng)使用布爾值(true/false),而綁定字符串類型時應(yīng)使用字符串('true'/'false')
    2024-12-12
  • 詳解VUE中的Proxy代理

    詳解VUE中的Proxy代理

    這篇文章主要介紹了Proxy代理對象詳解,Proxy 是ES6中提供的一個非常強(qiáng)大的功能,可以用來代理另一個對象,從而攔截、監(jiān)視并修改這個對象的各種操作,需要的朋友可以參考下
    2023-04-04
  • vue使用fengMap速度慢的原因分析

    vue使用fengMap速度慢的原因分析

    這篇文章主要介紹了vue使用fengMap速度慢的原因分析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue項(xiàng)目啟動白屏問題的幾種解決辦法

    Vue項(xiàng)目啟動白屏問題的幾種解決辦法

    這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目啟動白屏問題的幾種解決辦法,Vue項(xiàng)目打包后出現(xiàn)白屏的可能原因有很多,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 詳解Vue 中 extend 、component 、mixins 、extends 的區(qū)別

    詳解Vue 中 extend 、component 、mixins 、extends 的區(qū)別

    這篇文章主要介紹了Vue 中 extend 、component 、mixins 、extends 的區(qū)別,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • 分享幾個可以助你提高效率的Vue指令

    分享幾個可以助你提高效率的Vue指令

    vue是一款漸進(jìn)式JavaScript框架,漸進(jìn)式是指由淺到深,由簡單到復(fù)雜的使用vue框架,下面這篇文章主要給大家分享介紹了幾個可以助你提高效率的Vue指令,需要的朋友可以參考下
    2022-05-05
  • 詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • vue的滾動條插件實(shí)現(xiàn)代碼

    vue的滾動條插件實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue的滾動條插件實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評論

新宾| 开平市| 双城市| 奈曼旗| 丰都县| 郎溪县| 沅江市| 车致| 胶南市| 河北区| 宜章县| 常宁市| 无极县| 井陉县| 合江县| 望谟县| 镇坪县| 沈阳市| 监利县| 博兴县| 建阳市| 高碑店市| 远安县| 崇明县| 颍上县| 隆化县| 巫山县| 浮梁县| 缙云县| 吉安市| 张家川| 青川县| 延庆县| 鄯善县| 唐河县| 绥中县| 德昌县| 孝义市| 老河口市| 尚义县| 新余市|