亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用Vue模擬實(shí)現(xiàn)element-ui的分頁(yè)器效果

 更新時(shí)間:2022年11月03日 14:13:26   作者:言不及行yyds  
這篇文章主要為大家詳細(xì)介紹了如何利用Vue模擬實(shí)現(xiàn)element-ui的分頁(yè)器效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue前端el-input輸入限制輸入位數(shù)及輸入規(guī)則

    vue前端el-input輸入限制輸入位數(shù)及輸入規(guī)則

    這篇文章主要給大家介紹了關(guān)于vue前端el-input輸入限制輸入位數(shù)及輸入規(guī)則的相關(guān)資料,文中通過(guò)代碼介紹的介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • 最新評(píng)論