利用Vue模擬實(shí)現(xiàn)element-ui的分頁(yè)器效果
1. 思路
1.1客戶(hù)端
利用vue相關(guān)的知識(shí)搭建基本頁(yè)面,
上面四張圖片,下面是分頁(yè)器基本
效果靜態(tài)顯示。點(diǎn)擊分頁(yè)器實(shí)現(xiàn)
不同數(shù)據(jù)請(qǐng)求,顯示不同圖片
1.2服務(wù)器
根據(jù)客戶(hù)端發(fā)送的數(shù)據(jù)進(jìn)行數(shù)據(jù)
分段傳輸,比如,點(diǎn)擊的是那一頁(yè)
分頁(yè)器每次需要展示幾個(gè)數(shù)據(jù),
2.服務(wù)器
創(chuàng)建數(shù)據(jù)(存放圖片的網(wǎng)址,以及id)
創(chuàng)建接口,發(fā)送數(shù)據(jù)。
2.1創(chuàng)建數(shù)據(jù)
創(chuàng)建一個(gè)文件夾,下載express
npm i express
在該文件先創(chuàng)建一個(gè)
images.json文件使用
[
{
"id":1,
"imgUrl":"圖片網(wǎng)址"
},
{
"id":2,
"imgUrl":"圖片網(wǎng)址"
}
.
.
.
.
]
2.2創(chuàng)建接口
根據(jù)得到pageNo(用于顯示在第幾頁(yè)),pageSize(一頁(yè)顯示多少數(shù)據(jù))
比如在第一頁(yè),那么就是數(shù)組的第0項(xiàng)到第四項(xiàng)(pageSize)
采用切片的方法,我們可以得到一個(gè)等式及
每一項(xiàng)的開(kāi)始值為當(dāng)前頁(yè)減一在乘與pageSize
start=(pageNo-1)*pageSize
const express=require('express')
const fs=require('fs')
const app=express()
fs.readFile('./images.json',(err,data)=>{
if(err) return console.log(err)
let result=JSON.parse(data)
app.get('/imgsDate',(req,res)=>{
let start=0
let {pageNo,pageSize}=req.query
start=(pageNo-1)*pageSize
let end=parseInt(start)+parseInt(pageSize)
//解決跨域問(wèn)題
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', '*');
console.log(start,end)
//用于分段傳輸數(shù)據(jù)(切片方法一次傳遞4條數(shù)據(jù))
let data=result.slice(start,end)
res.send({data,total:result.length})
})
})
app.listen(8000,()=>{
console.log("開(kāi)啟成功")
})結(jié)果展示:

3.客戶(hù)端
需要完成的三大步
1.創(chuàng)建基本靜態(tài)頁(yè)面
2.請(qǐng)求數(shù)據(jù)展示
3.創(chuàng)建邏輯方法
3.1創(chuàng)建靜態(tài)頁(yè)面
home組件內(nèi)包含分頁(yè)器組件
<ul > <li><img src=""></li> </ul> <pagetionItem/>
分頁(yè)器組件
<div class="pagination">
<button >上一頁(yè)</button>
<button >1</button>
<button >.....</button>
<!-- 中間連續(xù)頁(yè)碼的地方:v-for、數(shù)組、對(duì)象、數(shù)字、字符串 -->
<button></button>
<button v-if="startAndEnd.end<totalPage-1">......</button>
<button>總頁(yè)數(shù)</button>
<button >下一頁(yè)</button>
<button style="margin-left: 30px">共 {{}} 條</button>
</div>3.2請(qǐng)求數(shù)據(jù)
根據(jù)前面的內(nèi)容,我們需要兩個(gè)參數(shù)pageNo,pageSize
home組件邏輯
<template >
<div>
<ul v-for="img in imgs" :key="img.id">
<li><img :src="img.imgUrl"></li>
</ul>
<pagetionItem
:pageNo="searchParams.pageNo"
:pageSize="searchParams.pageSize"
:total='total'
:pagerCount='5'
class="page"
@getPages="getPages"/>
</div>
</template>
data() {
return {
//得到數(shù)據(jù)
imgs: [],
//總數(shù)
total:null,
//請(qǐng)求參數(shù)
searchParams: {
pageNo: 3,
pageSize: 4
}
}
},
created() {
this.img()
},
methods: {
async img() {
let result = await axios.get("http://localhost:8000/imgsDate",
{
params: {
pageNo: this.searchParams.pageNo,
pageSize: this.searchParams.pageSize
}
})
this.imgs = result.data.data
this.total=result.data.total
},
//用于處理分頁(yè)器傳遞的當(dāng)前頁(yè)數(shù),利用全局總線(xiàn)得到數(shù)據(jù)
getPages(pageNo){
this.searchParams.pageNo=pageNo
this.img()
}
}分頁(yè)器組件
<template>
<div class="pagination">
<button :disabled="pageNo==1"
@click="$emit('getPages',pageNo-1)">上一頁(yè)</button>
<button v-if="startAndEnd.start > 1"
@click="$emit('getPages',1)" :class="{active:pageNo==1}">1</button>
<button v-if="startAndEnd.start > 2">.....</button>
<!-- 中間連續(xù)頁(yè)碼的地方:v-for、數(shù)組、對(duì)象、數(shù)字、字符串 -->
<button v-for="(page,index) in startAndEnd.end"
:key="index" v-if="page >=startAndEnd.start"
@click="$emit('getPages',page)" :class="{active:pageNo==page}">{{page}}</button>
<button v-if="startAndEnd.end<totalPage-1">......</button>
<button v-if="startAndEnd.end<totalPage"
@click="$emit('getPages',totalPage)" :class="{active:pageNo==total}">{{ totalPage }}</button>
<button :disabled="pageNo==totalPage"
@click="$emit('getPages',pageNo+1)">下一頁(yè)</button>
<button style="margin-left: 30px">共 {{total}} 條</button>
</div>
</template>
<script>
export default {
name: "pagetionItem",
props: ["total", "pageSize", "pageNo", "pagerCount"],
computed: {
//分頁(yè)器一共多少頁(yè)【總條數(shù)/每頁(yè)展示條數(shù)】
totalPage() {
//向上取整數(shù)
return Math.ceil(this.total / this.pageSize);
},
//底下的代碼是整個(gè)分頁(yè)器最重要的地方[算出連續(xù)五個(gè)數(shù)字、開(kāi)頭、結(jié)尾]
startAndEnd() {
//算出連續(xù)頁(yè)碼:開(kāi)始與結(jié)束這兩個(gè)數(shù)字
let start = 0,
end = 0;
const { totalPage, pagerCount, pageNo } = this;
//特殊情況:總共頁(yè)數(shù)小于連續(xù)頁(yè)碼數(shù)
if (totalPage < pagerCount) {
start = 1;
end = totalPage;
} else {
//正常情況:分頁(yè)器總頁(yè)數(shù)大于連續(xù)頁(yè)碼數(shù)
start = pageNo - parseInt(pagerCount / 2);
end = pageNo + parseInt(pagerCount / 2);
//約束start|end在合理范圍之內(nèi)
//約束頭部
if (start < 1) {
start = 1;
end = pagerCount;
}
//約束尾部
if (end > totalPage) {
end = totalPage;
start = totalPage - pagerCount + 1;
}
}
return { start, end };
},
}
};3.3解析邏輯
home組件,
在組件創(chuàng)建時(shí)實(shí)現(xiàn)方法,創(chuàng)建方法img
發(fā)送請(qǐng)求,等到相應(yīng)的數(shù)據(jù),
在home組件展示
分頁(yè)器
1.利用全局總線(xiàn)和自定義時(shí)間,
當(dāng)點(diǎn)擊分頁(yè)器的每一項(xiàng)時(shí)向home組件的getpage方法傳輸當(dāng)前是第幾頁(yè)
2.分頁(yè)器邏輯
總頁(yè)數(shù)=全部數(shù)據(jù) / 每一頁(yè)展示的數(shù)據(jù)(向上取整)
下一頁(yè)=當(dāng)前頁(yè)+1(當(dāng)當(dāng)前頁(yè)=總頁(yè)數(shù)時(shí),禁止按鈕點(diǎn)擊事件)
上一頁(yè)=當(dāng)前頁(yè)-1(當(dāng)當(dāng)前頁(yè)=1,禁止按鈕點(diǎn)擊事件)
中間按鈕顯示:
兩側(cè)都有(....)
當(dāng)數(shù)據(jù)的中間項(xiàng)-pizeSize
或者+pizeSize=等于第一項(xiàng)或者
等于最后一項(xiàng)時(shí)不顯示
4.總結(jié)
1.學(xué)會(huì)了怎么根據(jù)請(qǐng)求參數(shù),分段發(fā)送數(shù)據(jù)
2.學(xué)會(huì)了數(shù)據(jù)渲染與自定義事件與全局總線(xiàn)
3.學(xué)會(huì)了分頁(yè)器的基本思想
到此這篇關(guān)于利用Vue模擬實(shí)現(xiàn)element-ui的分頁(yè)器效果的文章就介紹到這了,更多相關(guān)Vue element-ui分頁(yè)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue使用Element-UI實(shí)現(xiàn)分頁(yè)效果全過(guò)程
- vue+Element-ui前端實(shí)現(xiàn)分頁(yè)效果
- vue+Element-ui實(shí)現(xiàn)分頁(yè)效果
- 在vue和element-ui的table中實(shí)現(xiàn)分頁(yè)復(fù)選功能
- vue + element-ui的分頁(yè)問(wèn)題實(shí)現(xiàn)
- vue+Element-ui實(shí)現(xiàn)分頁(yè)效果實(shí)例代碼詳解
- vue 基于element-ui 分頁(yè)組件封裝的實(shí)例代碼
- Vue+element-ui 實(shí)現(xiàn)表格的分頁(yè)功能示例
- 利用vue和element-ui設(shè)置表格內(nèi)容分頁(yè)的實(shí)例
- vue如何使用element-ui 實(shí)現(xiàn)自定義分頁(yè)
相關(guān)文章
在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果
這篇文章主要介紹了在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Vue實(shí)現(xiàn)生成二維碼的簡(jiǎn)單方式
與后端生成二維碼相比,前端生成二維碼更具有靈活性,下面這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)生成二維碼的簡(jiǎn)單方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
一步步教你用Vue.js創(chuàng)建一個(gè)組件(附代碼示例)
組件(Component)是Vue.js最強(qiáng)大的功能之一,組件可以擴(kuò)展HTML元素,封裝可重用的代碼,下面這篇文章主要給大家介紹了關(guān)于如何一步步用Vue.js創(chuàng)建一個(gè)組件的相關(guān)資料,需要的朋友可以參考下2022-12-12
Webpack+Vue如何導(dǎo)入Jquery和Jquery的第三方插件
本文主要介紹了Webpack+Vue導(dǎo)入Jquery和Jquery的第三方插件的方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
vue前端el-input輸入限制輸入位數(shù)及輸入規(guī)則

