vue中的自定義分頁(yè)插件組件的示例
介紹一下,已經(jīng)有很多的vue分頁(yè)的組件了,大家都是大同小易,那么我就結(jié)合自身的使用,寫出了一片文章


首先在新建一個(gè)分頁(yè)模塊

在模塊中引入相應(yīng)的代碼,(內(nèi)有詳細(xì)的注釋)
template中
<div class="page-bar">
<ul>
<li class="first">
<span>共{{dataNum}}條記錄 第 {{cur}} / {{all}} 頁(yè)</span>
</li>
<li v-if="cur>1">
<a v-on:click="cur--,pageClick()"><</a>//點(diǎn)擊上一頁(yè)
</li>
<li v-if="cur==1">
<a class="banclick"><</a>//點(diǎn)擊第一頁(yè)時(shí)顯示
</li>
<li class="li_a" v-for="index in indexs" v-bind:class="{ 'active': cur == index}">
<a v-on:click="btnClick(index)">{{ index }}</a>//頁(yè)碼
</li>
<li v-if="cur!=all">
<a v-on:click="cur++,pageClick()">></a>//點(diǎn)擊下一頁(yè)
</li>
<li v-if="cur == all">
<a class="banclick">></a> //點(diǎn)擊最后一頁(yè)時(shí)顯示
</li>
<li class="last_li">
<span>共<i>{{all}}</i>頁(yè)</span> // 共有多少頁(yè)
</li>
</ul>
</div>
style中的內(nèi)容
.page-bar a {
width: 34px;
height: 34px;
border: 1px solid #ddd;
text-decoration: none;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
/*margin-left: -1px;*/
line-height: 34px;
color: #333;
cursor: pointer
}
.page-bar .li_a a:hover {
background-color: #eee;
border: 1px solid #40A9FF;
color: #40A9FF;
}
.page-bar a.banclick {
cursor: not-allowed;
}
.page-bar .active a {
color: #fff;
cursor: default;
background-color: #1890FF;
border-color: #1890FF;
}
.page-bar i {
font-style: normal;
color: #d44950;
margin: 0px 4px;
font-size: 14px;
}
script
export default {
//顯示的聲明組件
name: "paging",
//從父級(jí)組件中傳值過來的,你可以自己設(shè)置名字,但是需要跟父級(jí)傳入的名字一致!
props : ["dataAll","dataCur","datanum","dataDatanum"],
data() {
return {
all: this.dataAll, //總頁(yè)數(shù)
cur: this.dataCur ,//當(dāng)前頁(yè)碼
num: this.datanum , //一頁(yè)顯示的數(shù)量 奇數(shù)
dataNum: this.dataDatanum,//數(shù)據(jù)的數(shù)量
}
},
watch: {
cur: function(oldValue, newValue) {
//父組件通過change方法來接受當(dāng)前的頁(yè)碼
this.$emit('change', oldValue)
//這里是直接點(diǎn)擊執(zhí)行函數(shù)
}
},
methods: {
btnClick: function(data) { //頁(yè)碼點(diǎn)擊事件
if(data != this.cur) {
this.cur = data
}
},
pageClick: function() {
console.log('現(xiàn)在在' + this.cur + '頁(yè)');
//父組件通過change方法來接受當(dāng)前的頁(yè)碼
//這里是點(diǎn)擊下一頁(yè)執(zhí)行函數(shù)
this.$emit('change', this.cur)
}
},
computed: {
indexs: function() {
var left = 1;
var right = this.all;
var ar = [];
if(this.all >= this.num ) {
if(this.cur > 3 && this.cur < this.all - 2) {
left = this.cur - (this.num-1)/2
right = this.cur + (this.num-1)/2
} else {
if(this.cur <= 3) {
left = 1
right = this.num
} else {
right = this.all
left = this.all - (this.num - 1);
}
}
}
while(left <= right) {
ar.push(left)
left++
}
return ar
}
}
}
父級(jí)的組件內(nèi)容
<template>
//這是我自己設(shè)置的,可以根據(jù)情況不用設(shè)置不同的樣式
<div class="page">
//這里時(shí)通過props傳值到子級(jí),并有一個(gè)回調(diào)change的函數(shù),來獲取自己傳值到父級(jí)的值
<paging :dataAll="all" :dataCur="cur" :datanum="num" :dataDatanum="dataNum" @change="pageChange"></paging>
</div>
</template>
<style scoped>
.page {
width: 100%;
min-width: 1068px;
height: 36px;
margin: 40px auto;
}
</style>
<script>
import Paging from './paging'
export default {
name: "homepage",
components: {
Paging
},
data() {
return {
all: 40, //總頁(yè)數(shù)
cur: 1, //當(dāng)前頁(yè)碼
num: 7, //一頁(yè)顯示的數(shù)量 必須是奇數(shù)
dataNum: 400, //數(shù)據(jù)的數(shù)量
}
},
methods: {
//子級(jí)傳值到父級(jí)上來的動(dòng)態(tài)拿去
pageChange: function(page) {
this.cur = page
}
}
}
</script>
最后重新保存,重新運(yùn)行
npm run dev

注意
可以根據(jù)自己喜好來自己動(dòng)手做一個(gè)分頁(yè),我在其它人的基礎(chǔ)之上添加了頁(yè)碼以及當(dāng)前頁(yè)面數(shù),也可以添加跳轉(zhuǎn)的頁(yè)數(shù)(暫時(shí)沒有做),也可以更改css樣式來改變!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解三種方式解決vue中v-html元素中標(biāo)簽樣式
這篇文章主要介紹了三種方式解決vue中v-html元素中標(biāo)簽樣式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
vue項(xiàng)目index.html中使用環(huán)境變量的代碼示例
在Vue3中使用環(huán)境變量的方式與Vue2基本相同,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目index.html中使用環(huán)境變量的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
Vue刷新后頁(yè)面數(shù)據(jù)丟失問題的解決過程
在做vue項(xiàng)目的過程中有時(shí)候會(huì)遇到一個(gè)問題,就是進(jìn)行F5頁(yè)面刷新的時(shí)候,頁(yè)面的數(shù)據(jù)會(huì)丟失,這篇文章主要給大家介紹了關(guān)于Vue刷新后頁(yè)面數(shù)據(jù)丟失問題的解決過程,需要的朋友可以參考下2022-11-11
vue proxyTable 接口跨域請(qǐng)求調(diào)試的示例
本篇文章主要介紹了vue proxyTable 接口跨域請(qǐng)求調(diào)試的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
Vue通過axios調(diào)用json地址數(shù)據(jù)的方法
在現(xiàn)代Web開發(fā)中,前后端分離已成為標(biāo)準(zhǔn)做法,Vue.js作為前端框架中的佼佼者,提供了豐富的API來處理數(shù)據(jù)和服務(wù)端的交互,其中一個(gè)常用的庫(kù)是axios,本文將詳細(xì)介紹如何在Vue項(xiàng)目中使用axios來調(diào)用JSON數(shù)據(jù),需要的朋友可以參考下2024-09-09
vite5+vue3+?import.meta.glob動(dòng)態(tài)導(dǎo)入vue組件圖文教程
import.meta.glob是Vite提供的一個(gè)特殊功能,它允許你在模塊范圍內(nèi)動(dòng)態(tài)地導(dǎo)入多個(gè)模塊,這篇文章主要給大家介紹了關(guān)于vite5+vue3+?import.meta.glob動(dòng)態(tài)導(dǎo)入vue組件的相關(guān)資料,需要的朋友可以參考下2024-07-07
vuex(vue狀態(tài)管理)的特殊應(yīng)用案例分享
Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。2020-03-03
聊聊Vue中provide/inject的應(yīng)用詳解
這篇文章主要介紹了聊聊Vue中provide/inject的應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

