基于vue實現(xiàn)分頁組件的示例代碼
分頁組件是一種用戶界面元素,用于在長列表或數(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;
| 屬性名 | 含義 | 類型 | 必填 | 默認值 |
|---|---|---|---|---|
| current | 當前頁碼 | Number | 否 | 1 |
| total | 總數(shù)據(jù)量 | Number | 否 | 0 |
| limit | 頁容量 | Number | 否 | 10 |
| visibleNumber | 可見頁碼數(shù) | Number | 否 | 10 |
| 事件名 | 含義 | 事件參數(shù) | 參數(shù)類型 |
|---|---|---|---|
| pageChange | 頁碼變化 | 新的頁碼 | Number |
# 基本樣式
新建一個Page.vue,在template寫入基本模板,通過a標簽(當然也可以用其他的),寫出基本模板,同時加入點擊事件和css樣式和一些動態(tài)樣式,用:class來綁定動態(tài)css類,同時要注意,只有當頁碼數(shù)大于一的時候才會用到這個組件,否則毫無意義,同時要注意,子組件不能更改父組件要用的數(shù)據(jù),以免出現(xiàn)錯誤
定義了一個active為加粗顏色,方便確定當前位置,通過vfor根據(jù)生成的數(shù)組循環(huán)生成a標簽
<template>
<!-- //只有總頁數(shù)大于1的時候才會顯示,比較穩(wěn)定,選擇用vif否則沒有意義 -->
<div class="pager-container" v-if="pageNumber > 1">
<!-- 子組件無權(quán)更改數(shù)據(jù),在父組件中數(shù)據(jù)更改可能會影響到其他,所以子組件只能通過發(fā)出通知的形式告訴父組件 -->
<!-- 點擊的時候調(diào)用h函數(shù),傳入適當?shù)膮?shù),大返回就傳入第一頁,小返回就傳入當前頁數(shù)-1 -->
<!-- 注意a標簽沒有href,如果寫上了就會存在重新加載頁面的問題 -->
<a @click="handleClick(1)" :class="{ disabled: current === 1 }"
>|<<</a
>
<a
@click="handleClick(current - 1)"
:class="{ disabled: current === 1 }"
><<</a
>
<!-- 循環(huán)生成的數(shù)組,設(shè)置唯一值,并且判斷添加active樣式(當前頁是否為) -->
<!-- 當前頁是多少就傳入多少 -->
<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 }"
>>></a
>
<a
@click="handleClick(pageNumber)"
:class="{ disabled: current === pageNumber }"
>>>|</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)出部分
計算屬性部分: 寫入了四個計算函數(shù),分別是pageNumber用來得到一共分成了多少頁(Math.ceil(this.total / this.limit); //總條數(shù)/每頁限制10條 得到頁數(shù))getMin(),getMax()得到當前展示頁最大的那一個和最小那一個頁數(shù)

算方法:min()this.current - Math.floor(this.visibleNumber / 2);//當前頁面減去最多顯示頁碼數(shù)的一半得到顯示最小的那個 max()this.getMin + this.visibleNumber - 1;最小值+當前頁面最多顯示幾個頁碼-1得到最大的那個頁碼 numbers():通過構(gòu)建一個數(shù)組,對數(shù)組里面添加頁數(shù),通過for循環(huán)從最小到最大,往里面添加數(shù)字形成數(shù)組(注意:每次轉(zhuǎn)跳都會重新渲染頁面,所以min和max都會不斷變化,數(shù)組的值也會不斷變化)
方法部分methods部分:
handleClick(newPage)方法拋出事件并且通知父組件,因為 子組件無權(quán)更改數(shù)據(jù),在父組件中數(shù)據(jù)更改可能會影響到其他,所以子組件只能通過發(fā)出通知的形式告訴父組件
- this.$emit 是 Vue 實例提供的方法,用于觸發(fā)自定義事件并通知父組件。
- “pageChange” 是自定義事件的名稱,可以根據(jù)具體情況自定義命名。
- newPage 是要傳遞給父組件的新頁碼數(shù)據(jù)。
- 通過這段代碼,當用戶點擊分頁組件的頁面導(dǎo)航按鈕時,會通過觸發(fā)自定義事件的方式通知父組件發(fā)生了頁碼的變化,父組件則可以根據(jù)新的頁碼進行相應(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ù)字
//當前頁面減去最多顯示頁碼數(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ù),等于當前頁數(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: {
//當前頁
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傳入當前頁數(shù),點擊調(diào)用子組件拋出的事件交由父組件執(zhí)行,在methods:總定義了新的方法handlePageChange傳入新頁碼,讓當前頁面變成新頁
最后data()方面?zhèn)魅肓嘶緮?shù)值
$event 是一個預(yù)留的特殊變量,用于傳遞事件對象或其他數(shù)據(jù)給事件處理函數(shù)。@pageChange 是監(jiān)聽自定義事件,當自定義事件被觸發(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é)點和渲染量,但是也會導(dǎo)致樹的不穩(wěn)定,而vshow可以保持數(shù)的穩(wěn)定,但不能減少樹的節(jié)點和渲染量 -->
<!-- 因此,在實際開發(fā)中,顯示頻繁變化的情況下應(yīng)該用vshow,用以保持樹的穩(wěn)定,顯示狀態(tài)變化少的時候用vif,用以減少樹的節(jié)點和渲染量 -->
</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é)點和渲染量,但是也會導(dǎo)致樹的不穩(wěn)定,而vshow可以保持數(shù)的穩(wěn)定,但不能減少樹的節(jié)點和渲染量因此,在實際開發(fā)中,顯示頻繁變化的情況下應(yīng)該用vshow,用以保持樹的穩(wěn)定,顯示狀態(tài)變化少的時候用vif,用以減少樹的節(jié)點和渲染量 二是子組件無權(quán)更改數(shù)據(jù),在父組件中數(shù)據(jù)更改可能會影響到其他,所以子組件只能通過發(fā)出通知的形式告訴父組件,于是出現(xiàn)了子組件拋出事件通知父組件要進行改變了,從而由父組件進行改變,并且重新渲染dom。通過點擊調(diào)用handleClick(newPage)方法傳入新頁碼參數(shù),同時this.emit("pageChange",newPage);是Vue實例提供的方法,用于觸發(fā)自定義事件并通知父組件。 //參數(shù):名字,數(shù)據(jù) 拋出事件通知父組件還要注意這個特殊的預(yù)留變量 emit("pageChange", newPage);是 Vue 實例提供的方法,用于觸發(fā)自定義事件并通知父組件。 //參數(shù):名字,數(shù)據(jù) 拋出事件通知父組件 還要注意這個特殊的預(yù)留變量 emit("pageChange",newPage);是Vue實例提供的方法,用于觸發(fā)自定義事件并通知父組件。 //參數(shù):名字,數(shù)據(jù) 拋出事件通知父組件還要注意這個特殊的預(yù)留變量 event 是一個預(yù)留的特殊變量,用于傳遞事件對象或其他數(shù)據(jù)給事件處理函數(shù)。@pageChange 是監(jiān)聽自定義事件,當自定義事件被觸發(fā)時,Vue 會自動將**事件對象作為參數(shù)傳遞給事件處理函數(shù)**。而 event‘ 則是用于接∗∗收這個事件對象的特殊變量∗∗。你可以自由選擇處理函數(shù)的形參名稱,例如這里使用了 ‘event` 則是用于接**收這個事件對象的特殊變量**。你可以自由選擇處理函數(shù)的形參名稱,例如這里使用了 `event‘ 則是用于接∗∗收這個事件對象的特殊變量∗∗。你可以自由選擇處理函數(shù)的形參名稱,例如這里使用了 ‘event,也可以使用其他名稱,如 event、e` 等。
以上就是基于vue實現(xiàn)分頁組件的示例代碼的詳細內(nèi)容,更多關(guān)于vue實現(xiàn)分頁組件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
element table組件內(nèi)容換行的實現(xiàn)方案
這篇文章主要介紹了element table組件內(nèi)容換行的實現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
vue計算屬性無法監(jiān)聽到數(shù)組內(nèi)部變化的解決方案
今天小編就為大家分享一篇vue計算屬性無法監(jiān)聽到數(shù)組內(nèi)部變化的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue 接口請求地址前綴本地開發(fā)和線上開發(fā)設(shè)置方式
這篇文章主要介紹了vue 接口請求地址前綴本地開發(fā)和線上開發(fā)設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

