大量數(shù)據(jù)虛擬滾動(dòng)el-table-virtual-scroll

需求

項(xiàng)目中寫(xiě)一個(gè)批量導(dǎo)入Excel數(shù)據(jù)的功能(大約8000行,30列),需要上傳文件調(diào)接口將后臺(tái)返回Excel文件里的數(shù)據(jù)不分頁(yè)用el-able展示出來(lái)。

問(wèn)題

因?yàn)榉祷氐臄?shù)據(jù)量很大,返回的數(shù)據(jù)還需要進(jìn)行二次處理,在列表中還有輸入框以及下拉選框,所以加載大量數(shù)據(jù)渲染的時(shí)候要加載非常久,甚至有頁(yè)面崩潰的情況

如下圖片顯示

table大概數(shù)據(jù)

調(diào)研

1.調(diào)研了vue-easytable,它的自定義一些相關(guān)的都是用的jsx的語(yǔ)法,對(duì)于只寫(xiě)過(guò)vue element項(xiàng)目的人員來(lái)說(shuō),不是很習(xí)慣,支持ie11
2.調(diào)研了vxetable,圖標(biāo)多樣,表格類(lèi)型多,里面的功能也非常豐富,但是3.0版本以后不支持IE(我覺(jué)得vxetable無(wú)論性能,還是功能都是最厲害的)
2.調(diào)研了el-table-virtual-scroll,基于Element-UI的Table 組件開(kāi)發(fā)的虛擬滾動(dòng)組件,對(duì)于寫(xiě)vue element-ui項(xiàng)目的人員來(lái)說(shuō),非常值得推薦目前僅支持vue2的項(xiàng)目,目前不支持ie

使用 el-table-virtual-scroll 插件

安裝

npm i el-table-virtual-scroll -S

代碼

<template>
    <!--若keyProp未設(shè)置或keyProp值不唯一,可能導(dǎo)致表格空數(shù)據(jù)或者滾動(dòng)時(shí)渲染的數(shù)據(jù)斷層、不連貫、滾動(dòng)不了-->
    <virtual-scroll
        :data="virtualData"
        :item-size="62"
        key-prop="id"
        @change="(virtualList) => tableData = virtualList"
        :virtualized="true"
    >
      <!--height一定要設(shè)置否則會(huì)滾動(dòng)條滾動(dòng)位置不對(duì)且數(shù)據(jù)滾動(dòng)全部加載完后會(huì)出現(xiàn)白板-->
      <el-table
          row-key="id"
          :data="tableData"
          height="600px"
      >
        <el-table-column prop="id" label="序號(hào)" width="60" fixed/>
        <!--使用虛擬加載插件多選需要引入VirtualColumn-->
        <virtual-column width="60" fixed type="selection"/>
        <el-table-column prop="name" label="名稱(chēng)" min-width="120"/>
        ...
        <el-table-column prop="operation" label="操作" width="70" fixed="right">
          <template v-slot="scope">
            <el-button type="danger" size="mini" plain>刪除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </virtual-scroll>
</template>
<script>
import VirtualScroll from 'el-table-virtual-scroll';
import { VirtualColumn } from 'el-table-virtual-scroll';

export default {
  components: {
    'virtual-scroll': VirtualScroll,
    'virtual-column': VirtualColumn
  },
  data() {
    return {
      virtualData: [], // 實(shí)際數(shù)據(jù)
      tableData: [], // 虛擬滾動(dòng)加載顯示的數(shù)據(jù)
      multipleSelection: [] // 勾選的數(shù)據(jù)
    }
  },
  created() {
    this.getVirtualList()
  },
  methods: {
    // 多選
    handleSelectionChange(val) {
      this.multipleSelection = val
    },
    // 接口返回的8000條數(shù)據(jù)
    getVirtualList() {
      this.tableList = data
    }
  }
}
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容