教你如何解決el-table巢狀el-popover處理卡頓問題
導讀 | 本文主要介紹了el-table巢狀el-popover處理卡頓的解決,文中透過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧 |
? 罪魁禍首
一個常見的場景是在表格行內以el-popover的形式對行內資訊進行一些業務操作。在表格分頁10條、20條的情況下頁面執行良好,但是在分頁400條的時候會出現肉眼可見的卡頓。原因是表格渲染的popover元件太多了,一行如果至少3個popover元件,那麼400行至少就得渲染1200個了。下面就是導致卡頓的通常寫法:
< el-table-column label="操作"> < template #default="{ row }"> < el-button class="button-main button-h-28"> 透過 < popover> < div @click="handleLog(row)">檢視日誌 < /popover> < /template> < /el-table-column>
? 解決方法
el-popover提供了一個虛擬觸發的功能,可以將觸發內容和下拉內容分開,那這樣就可以只用一個popover元件去涵蓋所有需要用到的場景。 像這個例子:
< template> < el-table :date="data"> < el-table-column label="稽核語句" min-width="150"> < template #default="{ row }"> < template v-for="(item, index) in row.childBOList" :key="item.clause"> < div> < div :ref="el => (refMap[item.clause] = el)" @click="handleRef(refMap[item.clause], item, -1)" > < !-- 觸發內容1 --> < /div> < /div> < /template> < /template> < /el-table-column> < el-table-column label="情感打標結果" min-width="150"> < template #default="{ row }"> < div> < div :ref="ref => (refMap[row.commentId] = ref)" @click="handleRef(refMap[row.commentId], row, 0)" > < !-- 觸發內容2 --> < /div> < /div> < /template> < /el-table-column> < el-table-column label="操作" min-width="150"> < template #default="{ row }"> < div> < div :ref="ref => (refMap[`${row.commentId}Check`] = ref)"> < !-- 觸發內容3 --> < /div> < /div> < /template> < /el-table-column> < /el-table> < el-popover v-model:visible="visiblePopover" :virtual-ref="tempRef" virtual-triggering :width="popoverWidth" > < template v-if="popoverType === -1"> < !-- 業務邏輯1 --> < /template> < template v-else-if="popoverType === 0"> < !-- 業務邏輯2 --> < /template> < template v-else> < !-- 業務邏輯3 --> < /template> < /el-popover> < /template> < script setup> const emotions = [ { desc: '好評', icon: 'icon-xiaolian' }, { desc: '中評', icon: 'icon-wubiaoqing' }, { desc: '差評', icon: 'icon-kulian' } ] const refMap = ref() const tempRef = ref() const visiblePopover = ref(false) // -1-字句稽核 0-整句稽核 1-日誌檢視 const popoverType = ref(0) const popoverWidth = computed(() => { [-1]: 80, [0]: 150, [1]: 90 }[popoverType.value]) const handleRef = (ref, item, type) => { tempRef.value = ref popoverType.value = type if (~type) { // ...業務邏輯1 } else { // ...業務邏輯2、3 } visiblePopover.value = true } < /script> < style scoped> .trigger { display: contents; } < /style>
現在,在這個例子中:
- popvoer以單例形式存在,不會出現400行就渲染上千個popover元件這樣的情況
- 需要一些中間狀態儲存相關狀態和資料
- 不同的觸發內容外套一層div.trigger用以去解決觸發和關閉popper的衝突(當需要用到外部點選去關閉popover的時候)
到此這篇關於el-table巢狀el-popover處理卡頓的解決的文章就介紹到這了。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2899207/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決ScrollView巢狀RecyclerView滑動卡頓問題View巢狀
- 巢狀ScrollView問題解決思路巢狀View
- 解決ReactNavigation中Navigator巢狀問題ReactNavigation巢狀
- 大容量XML檔案處理如何解決效能問題XML
- 如何解決快應用頁面滑動卡頓問題
- 四種方案解決ScrollView巢狀ListView問題View巢狀
- RestTemplate處理巢狀的複雜返回物件REST巢狀物件
- el-table 多表格彈窗巢狀資料顯示異常錯亂問題巢狀
- 不要在 XML 設定,解決 NestedScrollView 巢狀 RecyclerView 滑動卡頓XMLView巢狀
- 如何解決90%的自然語言處理問題:分步指南奉上自然語言處理
- SQL語句巢狀查詢問題SQL巢狀
- 【NPL】如何解決90%的自然語言處理問題:分步指南奉上自然語言處理
- 教你幾招讓你的Mac不再卡頓,流暢如新Mac
- 名稱空間與巢狀命名中的處理巢狀
- UIWebView與tableView巢狀的記憶體問題及解決方案UIWebView巢狀記憶體
- 教你如何處理Nginx禁止ip加埠訪問的問題Nginx
- android 巢狀問題(NestedScrolling)Android巢狀
- 解決 ScrollView 巢狀 RecyclerView 時,慣性滑動失效的問題View巢狀
- 用getChildFragmentManager解決Fragment巢狀Fragment資料丟失的問題Fragment巢狀
- 解決ScrollView巢狀ViewPager出現的滑動衝突問題巢狀Viewpager
- 教你如何解決PostgreSQL Array使用中的一些小問題SQL
- 教你如何解決MySQL資料延遲跳動的問題MySql
- Mysql中的巢狀子查詢問題QSBSMySql巢狀
- ajax請求的非同步巢狀問題分析非同步巢狀
- JSP中巢狀struts標籤的問題JS巢狀
- iPhone手機卡在載入頁面怎麼辦?如何解決iPhone卡頓問題iPhone
- NestedScrollView巢狀RecyclerView時滑動不流暢問題的解決辦法View巢狀
- 教你如何解決Python模組導包沒有找到的問題Python
- element-ui的----el-form表單校驗巢狀表單校驗(表單多層巢狀)+el-table和el-form巢狀使用表單校驗UIORM巢狀
- 記解決 Postman 卡頓,佔 CUP,卡死問題Postman
- 移動APP卡頓問題解決實踐APP
- 關於 Go Modules 巢狀引入本地包的問題Go巢狀
- react native ScrollView巢狀WebView 互動問題React Native巢狀WebView
- iOS中webView巢狀tableView中動態高度問題iOSWebView巢狀
- 電腦出現常見問題卡頓,教你優化提速技巧優化
- 解決Flutter的ListView巢狀ListView滑動衝突以及無限高度問題FlutterView巢狀
- android檢測卡頓問題,recycleview卡頓AndroidView
- iis 下 swfupload 上傳大檔案 卡頓 404 錯誤 等問題處理方法