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

vue2中的el-select組件數(shù)據(jù)太多,如何實(shí)現(xiàn)滾動(dòng)加載數(shù)據(jù)效果

 更新時(shí)間:2024年04月25日 09:47:17   作者:艾苧  
這篇文章主要介紹了vue2中的el-select組件數(shù)據(jù)太多,如何實(shí)現(xiàn)滾動(dòng)加載數(shù)據(jù)效果,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

項(xiàng)目場景

在我們平常開發(fā)中,我們的下拉框數(shù)據(jù)大部分都是后端一次性返回,然后前端直接塞到頁面渲染

我之前也是這么做的,但今天發(fā)現(xiàn)數(shù)據(jù)變得越來越多,已經(jīng)有五百多條了

所以我就決定著手優(yōu)化一下,怎么優(yōu)化呢

比如 分頁加載?虛擬列表?

問題描述

當(dāng)我們使用el-select下拉框選擇數(shù)據(jù)的時(shí)候,避免不了數(shù)據(jù)過多,導(dǎo)致一上來渲染到頁面會(huì)出現(xiàn)卡頓現(xiàn)象

比如說四五百條數(shù)據(jù),一下子塞到下拉框中,頁面剛開始渲染的時(shí)候

頁面許多地方都在渲染數(shù)據(jù)、重排、重繪,數(shù)據(jù)少還可以,數(shù)據(jù)太多會(huì)影響性能。

解決方案

el-select給我們提供了 支持遠(yuǎn)程搜索的功能,這樣我們可以一次渲染少許數(shù)據(jù),剩下數(shù)據(jù)可以通過搜索獲取。

但有時(shí)候 我不知道要搜索的數(shù)據(jù)名字叫什么,從而導(dǎo)致無法有效搜索,還有就是每次搜索都要請求一次數(shù)據(jù),其實(shí)官方這個(gè)優(yōu)化已經(jīng)解決大部分場景問題了。 

對于el-select的場景,顯然 虛擬列表 不是最優(yōu)的,因?yàn)樘摂M列表會(huì)把視口外的元素從dom樹里移出去,導(dǎo)致我們選擇的數(shù)據(jù)狀態(tài)無法保存,所以我決定使用分頁加載 。

后端剛開始一次性把所有數(shù)據(jù)返回給我,然后前端分批進(jìn)行渲染,如果后端一次性請求所有數(shù)據(jù)太慢,也可以分批加載,具體可以與后端溝通。

代碼如下

一開始先拿20條數(shù)據(jù),渲染頁面,聲明一個(gè)變量保存所有數(shù)據(jù)

//html結(jié)構(gòu)
 <el-select v-model="hospital" @visible-change="visible" placeholder="請選擇醫(yī)院" filterable collapse-tags multiple @change='changeHospital'>
     <el-option :disabled="loading" :label="item.hospital_name" :value="item.hospital_id" v-for="(item,index) in hospitalList" :key="item.hospital_id"></el-option>
 </el-select>

//js代碼

 // 下拉框出現(xiàn)的時(shí)候事件
  visible(val){
 		 //如果多個(gè)下拉框,需要具體給某個(gè)標(biāo)簽綁定
        let scroll = document.querySelectorAll('.el-scrollbar__wrap')
        //顯示的時(shí)候綁定,隱藏的時(shí)候移出綁定事件
        if(val){
             scroll[1].addEventListener('scroll',this.scrollLoad)
        }else{
             scroll[1].removeEventListener('scroll',this.scrollLoad)
         }
   },
    // 下拉框滾動(dòng)分頁加載數(shù)據(jù)
    scrollLoad(e){
         const { target: { clientHeight,scrollHeight,scrollTop } } = e
         const step = 100 //間隔,距離底部100的時(shí)候加載數(shù)據(jù)
         const len = this.hospitalList.length //獲取當(dāng)前展示的醫(yī)院列表長度
         if(len >= this.hospital_list.length)return //數(shù)據(jù)加載完畢
         //從總列表里每次 截取一段數(shù)據(jù),以便后期追加到頁面
         // 每次追加20條
         const data = this.hospital_list.slice(len,len + 20)
         //判斷觸底加載數(shù)據(jù)    
         if(clientHeight + scrollTop >= scrollHeight - step){
              this.hospitalList.push(...data)
              console.log('觸底加載數(shù)據(jù)');
         }
   }

如果感覺滾動(dòng)監(jiān)聽太頻繁,可以加個(gè)節(jié)流處理,我這里沒有加

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue.js學(xué)習(xí)筆記之 helloworld

    Vue.js學(xué)習(xí)筆記之 helloworld

    vue是法語中視圖的意思,Vue.js是一個(gè)輕巧、高性能、可組件化的MVVM庫,同時(shí)擁有非常容易上手的API。有需要的小伙伴可以參考下
    2016-08-08
  • 圖文詳解Vue3沒有代碼提示問題的解決辦法

    圖文詳解Vue3沒有代碼提示問題的解決辦法

    最近在使用Vue.js時(shí)候沒有自動(dòng)提示,就很難受,下面這篇文章主要給大家介紹了關(guān)于Vue3沒有代碼提示問題的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • vue中手機(jī)號,郵箱正則驗(yàn)證以及60s發(fā)送驗(yàn)證碼的實(shí)例

    vue中手機(jī)號,郵箱正則驗(yàn)證以及60s發(fā)送驗(yàn)證碼的實(shí)例

    下面小編就為大家分享一篇vue中手機(jī)號,郵箱正則驗(yàn)證以及60s發(fā)送驗(yàn)證碼的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue實(shí)現(xiàn)選項(xiàng)卡小案例

    vue實(shí)現(xiàn)選項(xiàng)卡小案例

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)選項(xiàng)卡小案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 詳解Vue computed計(jì)算屬性是什么

    詳解Vue computed計(jì)算屬性是什么

    在vue中,有時(shí)候你需要對data中的數(shù)據(jù)進(jìn)行處理,或者對抓取的數(shù)據(jù)進(jìn)行處理之后再掛載呈現(xiàn)到標(biāo)簽中,這時(shí)候你就需要計(jì)算屬性了,當(dāng)然看到這里你可能還是不了解那下面我舉幾個(gè)實(shí)例并附代碼解釋
    2023-03-03
  • Vue 幸運(yùn)大轉(zhuǎn)盤實(shí)現(xiàn)思路詳解

    Vue 幸運(yùn)大轉(zhuǎn)盤實(shí)現(xiàn)思路詳解

    這篇文章主要介紹了Vue 幸運(yùn)大轉(zhuǎn)盤實(shí)現(xiàn)思路詳解,需要的朋友可以參考下
    2019-05-05
  • vue3中如何使用live2D

    vue3中如何使用live2D

    本文介紹了如何在Vue3項(xiàng)目中整合Live2D技術(shù),從Live2D的基本介紹到在Vue3中的具體實(shí)現(xiàn)方法,Live2D技術(shù)允許開發(fā)者將二維圖像轉(zhuǎn)化為可動(dòng)畫的三維模型,主要應(yīng)用于游戲、虛擬角色等領(lǐng)域,文章詳細(xì)說明了在vue3項(xiàng)目中使用Live2D的步驟,感興趣的朋友一起看看吧
    2024-10-10
  • Vue渲染函數(shù)詳解

    Vue渲染函數(shù)詳解

    下面小編就為大家?guī)硪黄猇ue渲染函數(shù)詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 詳解vue填坑之解決部分瀏覽器不支持pushState方法

    詳解vue填坑之解決部分瀏覽器不支持pushState方法

    這篇文章主要介紹了詳解vue填坑之解決部分瀏覽器不支持pushState方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • vue.js表單驗(yàn)證插件(vee-validate)的使用教程詳解

    vue.js表單驗(yàn)證插件(vee-validate)的使用教程詳解

    這篇文章主要介紹了vue.js表單驗(yàn)證插件(vee-validate)的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05

最新評論

买车| 渭源县| 长寿区| 昌邑市| 南华县| 方山县| 普格县| 密山市| 乌拉特后旗| 万山特区| 武城县| 石屏县| 临城县| 綦江县| 达州市| 黄浦区| 遂宁市| 柳江县| 岢岚县| 和静县| 永康市| 定安县| 朝阳区| 花莲县| 那曲县| 新邵县| 湘阴县| 台安县| 马鞍山市| 贡嘎县| 德令哈市| 镶黄旗| 云浮市| 合肥市| 永年县| 修武县| 二连浩特市| 孟连| 广汉市| 永年县| 信丰县|