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

element?table?數(shù)據(jù)量大頁面卡頓的解決

 更新時間:2022年01月24日 10:07:37   作者:狗狗狗狗亮  
這篇文章主要介紹了element?table?數(shù)據(jù)量大頁面卡頓的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

element table數(shù)據(jù)量大頁面卡頓

table顯示醫(yī)院列表,這里后臺未做分頁,總共數(shù)據(jù)大約8000條。

一次性全部賦值給table整個頁面都會卡頓好幾秒。

查看了請求接口到數(shù)據(jù)返回的時間為192ms,可以接受。

在這里插入圖片描述

應該是頁面渲染的問題。

這邊就在前端做了分頁處理。

調用接口

 // 獲取醫(yī)院列表
    getHospitalList() {
      this.$api.Hospital.GetHospitalList().then(res => {
        if (res.status == 200) {
          this.tableData = res.data.response;
          this.total = res.data.response.length;
        }
      });
    },
  // 分頁
  handleCurrentChange(currentPage) {
    this.currentPage = currentPage;
  },
  // 搜索
 searchList() {
   let params = "";
   switch (this.select) {
     case "1":
       if (this.input3) {
         params = this.input3;
         this.$api.Hospital.QueryHospitalsByName(params).then(res => {
           if (res.data.length > 0) {
             this.tableData = res.data;
             this.currentPage = 1;
             this.total = res.data.length;
           } else {
             this.$message({
               message: "未查詢到醫(yī)院信息",
               type: "info"
             });
           }
           console.log(res);
         });
       }
       break;
     case "2":
       if (this.input3) {
         params = this.input3;
         this.$api.Hospital.QueryHospitalsByCode(params).then(res => {
           if (res.data.length > 0) {
             this.tableData = res.data;
             this.currentPage = 1;
             this.total = res.data.length;
           } else {
             this.$message({
               message: "未查詢到醫(yī)院信息",
               type: "info"
             });
           }
           console.log(res);
         });
       }
       break;
     default:
       console.log(111);
   }
 },

table組件

<el-table
    :data=" tableData.slice((currentPage - 1) * pageSize, currentPage * pageSize )  "
    border
    style="width: 100%"
    height="400"
    size="mini"
    highlight-current-row
  >
   ……
  </el-table>
  <el-pagination
    layout="prev, pager, next"
    background
    :page-size="pageSize"
    :total="total"
    @current-change="handleCurrentChange"
  >
  </el-pagination>

data里使用到的數(shù)據(jù)

data(){
	return {
		total: 0,
		currentPage: 1,
        pageSize: 50,
	}
}
		

在這里插入圖片描述

el-table大數(shù)據(jù)量渲染卡頓的一種思路

現(xiàn)需要呈現(xiàn)一個表格,有近500行,30多列,使用vue+elementUI呈現(xiàn)。

這個數(shù)據(jù)量不算大,但可能列數(shù)比較多,渲染時速度很慢,滾動會有卡頓,使用體驗不佳。

但并不想做分頁處理,想要盡可能接近excel的呈現(xiàn)。

思路

假設全部數(shù)據(jù)為allData(數(shù)組),現(xiàn)在使用一個displayData(數(shù)組),displayData = allData.slice(scorll, scorll+ displayCount),scroll表示當前滾動到的index, displayCount表示要展示的行數(shù)。把displayData設為el-table的數(shù)據(jù)源,只渲染該部分數(shù)據(jù)。通過對表格添加滾動事件監(jiān)聽,來動態(tài)更新scroll,并且對scroll添加watch,當scroll發(fā)生變化,就自動更新displayData。

滾動監(jiān)聽

監(jiān)聽滾動需要考慮到兼容性,火狐是DOMMouseScroll,其他的是mousewheel。

?? ??? ??? ?/*指定table的ref*/
? ? ? ? ? ? this.table = this.$refs.mytable.bodyWrapper;
?? ??? ??? ?
?? ??? ??? ?/*瀏覽器兼容*/
? ? ? ? ? ? let userAgent = navigator.userAgent; //取得瀏覽器的userAgent字符串
? ? ? ? ? ? let ff = userAgent.indexOf("Firefox") > -1; //判斷是否Firefox瀏覽器 ? ? ? ? ?
? ? ? ? ? ? if (ff) {
? ? ? ? ? ? ?this.table.addEventListener('DOMMouseScroll', (event) => {
? ? ? ? ? ? ? ? ? ? let detail = event.detail;
? ? ? ? ? ? ? ? ? ? //滾動方向
? ? ? ? ? ? ? ? ? ? let down = detail > 0;
? ? ? ? ? ? ? ? ? ? /**
? ? ? ? ? ? ? ? ? ? 根據(jù)滾動方向和距離修改scroll的值,需要注意scroll的范圍不能越界。
? ? ? ? ? ? ? ? ? ? **/
? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? }else{
? ? ? ? ? ? ? this.table.addEventListener('mousewheel', (event) => {
? ? ? ? ? ? ? ? ? ? let wheel = event.deltaY;
? ? ? ? ? ? ? ? ? ? //滾動方向
? ? ? ? ? ? ? ? ? ? let down = wheel > 0;
? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? }

slider

除了滾動表格,還需要一個模擬滾動條。這里選用slider控件,和scroll綁定。

發(fā)現(xiàn)elementUI的slider數(shù)值方向只能從下到上,且不能有太多的定制化。找到另外一個可深度定制化的vue slider控件:vue-slider-component。通過參數(shù)配置及css修改使其盡可能像滾動條。

在這里插入圖片描述

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

相關文章

  • Vue electron前端開啟局域網(wǎng)接口實現(xiàn)流程詳細介紹

    Vue electron前端開啟局域網(wǎng)接口實現(xiàn)流程詳細介紹

    用electron寫了一個自己用的小軟件,無后端,純本地的數(shù)據(jù)。最近想著開發(fā)一個手機端app,將PC端的數(shù)據(jù)進行同步。為了這小小的功能單獨寫個后端又麻煩。干脆前后端不分離哈哈,直接在前端軟件中開啟接口
    2022-10-10
  • axios二次封裝的詳細過程與跨域問題

    axios二次封裝的詳細過程與跨域問題

    通常我們的項目會越做越大,頁面也會越來越多,隨之而來的是接口數(shù)量的增加,api統(tǒng)一管理,不管接口有多少,所有的接口都可以非常清晰,容易維護,下面這篇文章主要給大家介紹了關于axios二次封裝的詳細過程與跨域問題的相關資料,需要的朋友可以參考下
    2022-09-09
  • 快速了解Vue父子組件傳值以及父調子方法、子調父方法

    快速了解Vue父子組件傳值以及父調子方法、子調父方法

    這篇文章主要介紹了Vue父子組件傳值以及父調子方法、子調父方法,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • vue+element的表格實現(xiàn)批量刪除功能示例代碼

    vue+element的表格實現(xiàn)批量刪除功能示例代碼

    這篇文章主要介紹了vue+element的表格實現(xiàn)批量刪除功能示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • vue-cli 構建骨架屏的方法示例

    vue-cli 構建骨架屏的方法示例

    這篇文章主要介紹了vue-cli 構建骨架屏的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue后臺實現(xiàn)點擊圖片放大功能的示例代碼

    Vue后臺實現(xiàn)點擊圖片放大功能的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Vue實現(xiàn)點擊圖片放大功能,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-12-12
  • 解決el-date-picker日期選擇控件少一天的問題

    解決el-date-picker日期選擇控件少一天的問題

    這篇文章主要介紹了解決el-date-picker日期選擇控件少一天的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue自定義指令用法經(jīng)典實例小結

    vue自定義指令用法經(jīng)典實例小結

    這篇文章主要介紹了vue自定義指令用法,結合實例形式總結分析了vue自定義指令常見寫法與相關操作注意事項,需要的朋友可以參考下
    2019-03-03
  • 想到頭禿也想不到的Vue3復用組件還可以這么hack的用法

    想到頭禿也想不到的Vue3復用組件還可以這么hack的用法

    這篇文章主要為大家介紹了想到頭禿也想不到的Vue3復用組件還可以這么hack的用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • vue中分割線的實現(xiàn)方式

    vue中分割線的實現(xiàn)方式

    這篇文章主要介紹了vue中分割線的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論