網站首頁 Vue 正文
element table數據量大頁面卡頓
table顯示醫院列表,這里后臺未做分頁,總共數據大約8000條。
一次性全部賦值給table整個頁面都會卡頓好幾秒。
查看了請求接口到數據返回的時間為192ms,可以接受。
應該是頁面渲染的問題。
這邊就在前端做了分頁處理。
調用接口
// 獲取醫院列表 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: "未查詢到醫院信息", 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: "未查詢到醫院信息", 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里使用到的數據
data(){ return { total: 0, currentPage: 1, pageSize: 50, } }
el-table大數據量渲染卡頓的一種思路
現需要呈現一個表格,有近500行,30多列,使用vue+elementUI呈現。
這個數據量不算大,但可能列數比較多,渲染時速度很慢,滾動會有卡頓,使用體驗不佳。
但并不想做分頁處理,想要盡可能接近excel的呈現。
思路
假設全部數據為allData(數組),現在使用一個displayData(數組),displayData = allData.slice(scorll, scorll+ displayCount),scroll表示當前滾動到的index, displayCount表示要展示的行數。把displayData設為el-table的數據源,只渲染該部分數據。通過對表格添加滾動事件監聽,來動態更新scroll,并且對scroll添加watch,當scroll發生變化,就自動更新displayData。
滾動監聽
監聽滾動需要考慮到兼容性,火狐是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; ? ? ? ? ? ? ? ? ? ? /** ? ? ? ? ? ? ? ? ? ? 根據滾動方向和距離修改scroll的值,需要注意scroll的范圍不能越界。 ? ? ? ? ? ? ? ? ? ? **/ ? ? ? ? ? ? ? ? ? ? }); ? ? ? ? ? ? }else{ ? ? ? ? ? ? ? this.table.addEventListener('mousewheel', (event) => { ? ? ? ? ? ? ? ? ? ? let wheel = event.deltaY; ? ? ? ? ? ? ? ? ? ? //滾動方向 ? ? ? ? ? ? ? ? ? ? let down = wheel > 0; ? ? ? ? ? ? ? ? ? ? }); ? ? ? ? ? ? }
slider
除了滾動表格,還需要一個模擬滾動條。這里選用slider控件,和scroll綁定。
發現elementUI的slider數值方向只能從下到上,且不能有太多的定制化。找到另外一個可深度定制化的vue slider控件:vue-slider-component。通過參數配置及css修改使其盡可能像滾動條。
原文鏈接:https://blog.csdn.net/weixin_44046951/article/details/110821148
相關推薦
- 2022-01-04 給所有使用el-table組件特定列添加統一事件及樣式
- 2022-03-19 C語言數據的存儲詳解_C 語言
- 2022-08-28 詳解Python獲取線程返回值的三種方式_python
- 2023-03-05 Redis緩存工具封裝實現_Redis
- 2022-12-09 PyTorch中關于tensor.repeat()的使用_python
- 2023-04-02 go?MethodByName()不能獲取私有方法的解決_Golang
- 2022-05-04 C#異步編程由淺入深(三)之詳解Awaiter_C#教程
- 2022-05-14 python中opencv支持向量機的實現_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支