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

vue3實現(xiàn)el-table分批渲染表格

 更新時間:2024年11月11日 09:54:25   作者:藍白界貓晨  
這篇文章主要為大家詳細介紹了vue3項目中如何實現(xiàn)el-table分批渲染表格,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

因最近工作中遇到了無分頁情景下頁面因大數(shù)據(jù)量卡頓的問題,在分別考慮并嘗試了懶加載、虛擬滾動、分批渲染等各個方法后,最后決定使用分批渲染來解決該問題。

代碼實現(xiàn)

表格代碼

<el-table 
    :data="currTableData"
    border
    style="width: 100%;"
    :max-height="getMaxHeight()"
    :cell-style="CellStyle" 
    @cell-click="handleCellClick"
>
    <!--姓名列-->
    <el-table-column 
        style="background-color: #fff;"
        :align="'center'"
        prop="userName"
        label="姓名"
        width="80"
        fixed/>
    <!--工號-->
    <el-table-column 
        v-for="(item, index) in filteredCfgColumns"
        :key="index"
        style="background-color: #fff;"
        :align="'center'"
        :prop="item.prop"
        :label="item.label"
    />

    <!--
        這一塊牽扯到合并列及周期模式切換后的動態(tài)展示
        需要特殊處理,不要寫死
    -->
    <el-table-column 
        v-for="(date, index) in dateHeaders" 
        :key="index" 
        :align="'center'"
        :class-name="isWeekend(date)"
        :label-class-name="isWeekend(date)"
        :width="getColumnWidth()"
    >
        <!--星期幾/日期-->
        <template #header>
            <div>{{ getWeekDay(date) }}</div>
            <div>{{ parseDate(date) }}</div>
        </template>

        <!--表格內(nèi)容 -->
        <template #default="{row}">
            <div 
                class="cell-content"
                v-if="row[date]"
                :data-cell-content="JSON.stringify(row[date])"
                :class="`${row[date].cellKey}`"
            >
                <!-- 第一行 -->
                <div v-if="pageSettingList.includes('顯示附加班')" class="row"
                    style="font-size: 8px;min-height: 12px; display: flex; align-items: center;">
                    <el-row style="width: 100%;">
                        <el-col :span="24" style="color: red;font-weight: 600;text-align: right;">
                            {{ row[date]?.attchDetail || '' }}
                        </el-col>
                    </el-row>
                </div>
                <!-- 第二行 -->
                <div class="row"
                    style="font-size: 10px;min-height: 20px; display: flex; align-items: center;white-space: nowrap;overflow: hidden;">
                    <el-row style="width: 100%;">
                        <el-col :span="24" style="font-weight: 600;text-align: center;">
                            <StyledText :colorAndSchedules="colorAndSchedules"
                                :styledTexts="row[date]?.mainDetail || ''" />
                        </el-col>
                    </el-row>
                </div>
                <!-- 第三行 -->
                <div class="row"
                    style="font-size: 8px;min-height: 12px; display: flex; align-items: center;">
                    <el-row style="width: 100%;">
                        <el-col :span="6" v-if="pageSettingList.includes('顯示上期排班')"
                            style="display: block;text-align: left;font-weight: 600;color: green;">
                            {{ 'A1' }}
                        </el-col>
                        <el-col :span="12" v-if="pageSettingList.includes('顯示申請班')"
                            style="display: block;text-align: center;font-weight: 600;color: green;">
                            {{ row[date]?.applyDetail || '' }}
                        </el-col>
                        <el-col :span="6" 
                            style="display: block;text-align: left;font-weight: 600;color: green;">  
                            <div class="tip-con">
                                <el-tooltip
                                style="position: absolute!important; right: 0;bottom: 0; color: red; font-size: 12px;" 
                                placement="top" 
                                v-if="isShowRemark(row[date]?.remarkInfo)">
                                    <template #content>
                                        <el-table :data="row[date]?.remarkInfo" style="width: 100%">
                                            <el-table-column prop="shifts" label="班次名" width="180" />
                                            <el-table-column prop="remark" label="備注" width="180" />
                                            <el-table-column prop="type" label="班次類型" />
                                        </el-table>
                                    </template>
                                    <el-icon><InfoFilled /></el-icon>
                                </el-tooltip>
                            </div>
                        </el-col>
                    </el-row>
                </div>                                 
            </div>
        </template>
    </el-table-column>
</el-table>

分批渲染邏輯代碼

定義變量

 startIndex: 0, //開始索引,用于分批渲染的
 batchSize: 6, // 一次性渲染的條數(shù)

分批渲染方法

const currTableData = ref([])

const loadBatch = () => {
   if (state.startIndex < props.tableData.length) {
       const endIndex = Math.min(state.startIndex + state.batchSize, props.tableData.length);
       currTableData.value = currTableData.value.concat(props.tableData.slice(state.startIndex, endIndex));
       state.startIndex = endIndex;
       requestAnimationFrame(loadBatch);
   } 
}

watch(() => props.tableData, newData => {
   currTableData.value = []; // 重置數(shù)據(jù)
   state.startIndex = 0;
   loadBatch()
}, { immediate: true })

效果

上面便是分批渲染表格的具體實現(xiàn)方式,可以看到這個表格是相當復雜的,哪怕是使用了分批渲染,第一次也用了6秒多的時間,可想而知如果一次性渲染幾百行幾千行,消耗的時間肯定會大大影響用戶體驗。當然,這種頁面性能的優(yōu)化不僅僅分批渲染一種手段,后面我會持續(xù)探索,如果有了新的手段,也會總結(jié)成文的。

到此這篇關(guān)于vue3實現(xiàn)el-table分批渲染表格的文章就介紹到這了,更多相關(guān)vue3 el-table分批渲染表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue實現(xiàn)彈出框點擊空白頁彈框消失效果

    Vue實現(xiàn)彈出框點擊空白頁彈框消失效果

    這篇文章主要介紹了VUE實現(xiàn)彈出框點擊空白頁彈框消失,實現(xiàn)方法可以在Vue中實現(xiàn)彈出框然后通過點擊空白頁面來讓彈窗隱藏,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • vue實現(xiàn)購物車列表

    vue實現(xiàn)購物車列表

    這篇文章主要為大家詳細介紹了vue實現(xiàn)購物車列表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • vue3+Echarts頁面加載不渲染顯示空白頁面的解決

    vue3+Echarts頁面加載不渲染顯示空白頁面的解決

    這篇文章主要介紹了vue3+Echarts頁面加載不渲染顯示空白頁面的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue實現(xiàn)將數(shù)據(jù)存入vuex中以及從vuex中取出數(shù)據(jù)

    vue實現(xiàn)將數(shù)據(jù)存入vuex中以及從vuex中取出數(shù)據(jù)

    今天小編就為大家分享一篇vue實現(xiàn)將數(shù)據(jù)存入vuex中以及從vuex中取出數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue3+ts重復參數(shù)提取成方法多處調(diào)用以及字段無值時不傳字段給后端問題

    vue3+ts重復參數(shù)提取成方法多處調(diào)用以及字段無值時不傳字段給后端問題

    在進行API開發(fā)時,優(yōu)化參數(shù)傳遞是一個重要的考量,傳統(tǒng)方法中,即使參數(shù)值為空,也會被包含在請求中發(fā)送給后端,這可能會導致不必要的數(shù)據(jù)處理,而優(yōu)化后的方法則只會傳遞那些實際有值的字段,從而提高數(shù)據(jù)傳輸?shù)挠行院秃蠖颂幚淼男?/div> 2024-10-10
  • vue實現(xiàn)歌手列表字母排序下拉滾動條側(cè)欄排序?qū)崟r更新

    vue實現(xiàn)歌手列表字母排序下拉滾動條側(cè)欄排序?qū)崟r更新

    這篇文章主要介紹了vue實現(xiàn)歌手列表字母排序,下拉滾動條側(cè)欄排序?qū)崟r更新,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • vue開發(fā)公共組件之返回頂部

    vue開發(fā)公共組件之返回頂部

    這篇文章主要為大家詳細介紹了vue開發(fā)公共組件之返回頂部,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • element表格去掉表頭的實現(xiàn)方法

    element表格去掉表頭的實現(xiàn)方法

    本文主要介紹了element表格去掉表頭的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Vue3?watchEffect的使用教程和相關(guān)概念

    Vue3?watchEffect的使用教程和相關(guān)概念

    Vue?3?引入了?Composition?API,其中?watchEffect?是一個非常強大的工具,用于響應式地追蹤依賴項的變化,本文將詳細介紹?watchEffect?的使用方法和相關(guān)概念,文中有詳細的代碼供大家參考,需要的朋友可以參考下
    2024-08-08
  • Vue.js原理分析之observer模塊詳解

    Vue.js原理分析之observer模塊詳解

    這篇文章主要介紹了Vue.js中observer模塊的相關(guān)資料,文中通過原理分析介紹還是相對的詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-02-02

最新評論

绩溪县| 昌图县| 个旧市| 台南市| 辉南县| 武定县| 前郭尔| 汾西县| 无为县| 沐川县| 安多县| 白城市| 大庆市| 大田县| 凤阳县| 土默特右旗| 南投市| 六盘水市| 彰化市| 永寿县| 深圳市| 怀远县| 清水县| 沈丘县| 连江县| 泽普县| 织金县| 晋江市| 汽车| 嘉祥县| 宿迁市| 迭部县| 永年县| 山西省| 谷城县| 甘孜| 汉沽区| 汝阳县| 新兴县| 苍山县| 屯昌县|