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

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

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

1. 思路

1.1客戶端

利用vue相關(guān)的知識搭建基本頁面,

上面四張圖片,下面是分頁器基本

效果靜態(tài)顯示。點擊分頁器實現(xiàn)

不同數(shù)據(jù)請求,顯示不同圖片

1.2服務(wù)器

根據(jù)客戶端發(fā)送的數(shù)據(jù)進行數(shù)據(jù)

分段傳輸,比如,點擊的是那一頁

分頁器每次需要展示幾個數(shù)據(jù),

2.服務(wù)器

創(chuàng)建數(shù)據(jù)(存放圖片的網(wǎng)址,以及id)

創(chuàng)建接口,發(fā)送數(shù)據(jù)。

2.1創(chuàng)建數(shù)據(jù)

創(chuàng)建一個文件夾,下載express

npm i express

在該文件先創(chuàng)建一個

images.json文件使用

[
    {
     "id":1,
     "imgUrl":"圖片網(wǎng)址"
    },
    {
     "id":2,
     "imgUrl":"圖片網(wǎng)址"
    }
     .
     .
     .
     .
]

2.2創(chuàng)建接口

根據(jù)得到pageNo(用于顯示在第幾頁),pageSize(一頁顯示多少數(shù)據(jù))

比如在第一頁,那么就是數(shù)組的第0項到第四項(pageSize)

采用切片的方法,我們可以得到一個等式及

每一項的開始值為當前頁減一在乘與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)
 
        //解決跨域問題
        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("開啟成功")
})

結(jié)果展示:

3.客戶端

需要完成的三大步

1.創(chuàng)建基本靜態(tài)頁面

2.請求數(shù)據(jù)展示

3.創(chuàng)建邏輯方法

3.1創(chuàng)建靜態(tài)頁面

home組件內(nèi)包含分頁器組件

<ul >
   <li><img src=""></li>
</ul>
 <pagetionItem/>

分頁器組件

<div class="pagination">
        <button  >上一頁</button>
        <button >1</button>
        <button >.....</button>
 
        <!-- 中間連續(xù)頁碼的地方:v-for、數(shù)組、對象、數(shù)字、字符串 -->
        <button></button>
 
        <button v-if="startAndEnd.end<totalPage-1">......</button>
        <button>總頁數(shù)</button>
 
        <button >下一頁</button>
 
        <button style="margin-left: 30px">共 {{}} 條</button>
</div>

3.2請求數(shù)據(jù)

根據(jù)前面的內(nèi)容,我們需要兩個參數(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,
            //請求參數(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
        },
        //用于處理分頁器傳遞的當前頁數(shù),利用全局總線得到數(shù)據(jù)
        getPages(pageNo){
        this.searchParams.pageNo=pageNo
        this.img()
        }
    }

分頁器組件

<template>
    <div class="pagination">
        <button :disabled="pageNo==1" 
        @click="$emit('getPages',pageNo-1)">上一頁</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ù)頁碼的地方:v-for、數(shù)組、對象、數(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)">下一頁</button>
 
        <button style="margin-left: 30px">共 {{total}} 條</button>
    </div>
</template>
  
<script>
export default {
    name: "pagetionItem",
    props: ["total", "pageSize", "pageNo", "pagerCount"],
    computed: {
        //分頁器一共多少頁【總條數(shù)/每頁展示條數(shù)】
        totalPage() {
            //向上取整數(shù)
            return Math.ceil(this.total / this.pageSize);
        },
        //底下的代碼是整個分頁器最重要的地方[算出連續(xù)五個數(shù)字、開頭、結(jié)尾]
        startAndEnd() {
            //算出連續(xù)頁碼:開始與結(jié)束這兩個數(shù)字
            let start = 0,
                end = 0;
            const { totalPage, pagerCount, pageNo } = this;
            //特殊情況:總共頁數(shù)小于連續(xù)頁碼數(shù)
            if (totalPage < pagerCount) {
                start = 1;
                end = totalPage;
            } else {
                //正常情況:分頁器總頁數(shù)大于連續(xù)頁碼數(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)建時實現(xiàn)方法,創(chuàng)建方法img

發(fā)送請求,等到相應的數(shù)據(jù),

在home組件展示

分頁器

1.利用全局總線和自定義時間,

當點擊分頁器的每一項時向home組件的getpage方法傳輸當前是第幾頁

2.分頁器邏輯

總頁數(shù)=全部數(shù)據(jù)  / 每一頁展示的數(shù)據(jù)(向上取整)

下一頁=當前頁+1(當當前頁=總頁數(shù)時,禁止按鈕點擊事件)

上一頁=當前頁-1(當當前頁=1,禁止按鈕點擊事件)

中間按鈕顯示:

兩側(cè)都有(....)

當數(shù)據(jù)的中間項-pizeSize

或者+pizeSize=等于第一項或者

等于最后一項時不顯示

4.總結(jié)

1.學會了怎么根據(jù)請求參數(shù),分段發(fā)送數(shù)據(jù)

2.學會了數(shù)據(jù)渲染與自定義事件與全局總線

3.學會了分頁器的基本思想

到此這篇關(guān)于利用Vue模擬實現(xiàn)element-ui的分頁器效果的文章就介紹到這了,更多相關(guān)Vue element-ui分頁器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

彭泽县| 铜川市| 高陵县| 安吉县| 柯坪县| 五台县| 出国| 赞皇县| 崇文区| 呼图壁县| 托克托县| 任丘市| 嵩明县| 高邑县| 调兵山市| 牟定县| 兖州市| 枝江市| 修水县| 阿鲁科尔沁旗| 星座| 西林县| 襄城县| 深泽县| 江陵县| 金阳县| 定襄县| 绥江县| 太仆寺旗| 陇川县| 四平市| 济源市| 中西区| 咸丰县| 大兴区| 濮阳市| 游戏| 桦南县| 衡南县| 中江县| 卓尼县|