欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1. 思路

1.1客戶端

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

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

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

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

1.2服務(wù)器

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

分段傳輸,比如,點(diǎn)擊的是那一頁

分頁器每次需要展示幾個數(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項(xiàng)到第四項(xiàng)(pageSize)

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

每一項(xiàng)的開始值為當(dāng)前頁減一在乘與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
        },
        //用于處理分頁器傳遞的當(dāng)前頁數(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)建時實(shí)現(xiàn)方法,創(chuàng)建方法img

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

在home組件展示

分頁器

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

當(dāng)點(diǎn)擊分頁器的每一項(xiàng)時向home組件的getpage方法傳輸當(dāng)前是第幾頁

2.分頁器邏輯

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

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

上一頁=當(dāng)前頁-1(當(dāng)當(dāng)前頁=1,禁止按鈕點(diǎn)擊事件)

中間按鈕顯示:

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

當(dāng)數(shù)據(jù)的中間項(xiàng)-pizeSize

或者+pizeSize=等于第一項(xiàng)或者

等于最后一項(xiàng)時不顯示

4.總結(jié)

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

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

3.學(xué)會了分頁器的基本思想

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

相關(guān)文章

  • Vue對象的深層劫持詳細(xì)講解

    Vue對象的深層劫持詳細(xì)講解

    這篇文章主要介紹了vue2.x對象深層劫持的原理實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果

    在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果

    這篇文章主要介紹了在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Vue實(shí)現(xiàn)生成二維碼的簡單方式

    Vue實(shí)現(xiàn)生成二維碼的簡單方式

    與后端生成二維碼相比,前端生成二維碼更具有靈活性,下面這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)生成二維碼的簡單方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 一步步教你用Vue.js創(chuàng)建一個組件(附代碼示例)

    一步步教你用Vue.js創(chuàng)建一個組件(附代碼示例)

    組件(Component)是Vue.js最強(qiáng)大的功能之一,組件可以擴(kuò)展HTML元素,封裝可重用的代碼,下面這篇文章主要給大家介紹了關(guān)于如何一步步用Vue.js創(chuàng)建一個組件的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Vue3中Hooks封裝的技巧詳解

    Vue3中Hooks封裝的技巧詳解

    這篇文章主要來和大家分享一些關(guān)于 Vue3中Hooks封裝的技巧,希望能夠?yàn)榇蠹以?nbsp;Vue 3 項(xiàng)目中更好地利用 Hooks 提供一些思路和實(shí)踐經(jīng)驗(yàn)
    2023-12-12
  • Webpack+Vue如何導(dǎo)入Jquery和Jquery的第三方插件

    Webpack+Vue如何導(dǎo)入Jquery和Jquery的第三方插件

    本文主要介紹了Webpack+Vue導(dǎo)入Jquery和Jquery的第三方插件的方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 簡述vue狀態(tài)管理模式之vuex

    簡述vue狀態(tài)管理模式之vuex

    這篇文章主要介紹了簡述vue狀態(tài)管理模式之vuex,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Element布局組件el-row和el-col的使用

    Element布局組件el-row和el-col的使用

    這篇文章主要介紹了Element布局組件el-row和el-col的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue中ref實(shí)現(xiàn)子向父傳值的示例

    vue中ref實(shí)現(xiàn)子向父傳值的示例

    本文主要介紹了vue中ref實(shí)現(xiàn)子向父傳值的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • vue前端el-input輸入限制輸入位數(shù)及輸入規(guī)則

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

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

最新評論