使用el-table渲染将近200列数据渲染慢的问题

##el-table渲染数据慢
使用el-table渲染将近200列数据用了将近30s的时候,这样肯定是不行的。
解决办法,找了一个表格组件 vxe-table,使用它的虚拟滚动
下面是表格代码,这里用vxe-grid标签

<vxe-grid
   border
   stripe
   resizable
   show-overflow="title"
   ref="xGrid"
   height="400px"
   :loading="loading"
   :column-config="{useKey: true}"
   @checkbox-change="onSelectionChange"
   @checkbox-all="onSelectAll">
 </vxe-grid>

渲染数据行列相关代码,前面添加复选框列和序号列
colData中存的是表头信息
rowData中存储表格数据

loadColumnAndData (colData, rowData) {
      this.loading = true
      Promise.all([
        this.mockColumns(colData),
        this.mockList(rowData)
      ]).then(rest => {
        const columns = rest[0]
        const data = rest[1]
        const startTime = Date.now()
        const xGrid = this.$refs.xGrid
        // console.log(columns)
        // 使用函数式加载,阻断 vue 对大数组的双向绑定
        if (xGrid) {
          Promise.all([
            xGrid.reloadColumn(columns),
            xGrid.reloadData(data)
          ]).then(() => {
            // VXETable.modal.message({ content: `渲染 xxx 列 xx 行,用时 ${Date.now() - startTime}毫秒`, status: 'info' })
            this.loading = false
          })
        }
      })
    },
    mockColumns (colData) {
      return new Promise(resolve => {
        const cols = []
        for (let index = 0; index < colData.length + 2; index++) {
          if (index === 0) {
            cols.push({
              type: 'checkbox',
              width: 50,
              fixed: 'left'
            })
          } else if (index === 1) {
            cols.push({
              title: '序号',
              type: 'seq',
              width: 60,
              fixed: 'left'
            })
          } else {
            cols.push({
              title: colData[index - 2].name,
              field: colData[index - 2].key,
              minWidth: 80,
              slots: {
                header: ({ column }, h) => {
                  let data = colData[index - 2]
                  return h('div', {
                    class: {
                      'header-column': true
                    }
                  }, [h('i', {
                    class: {
                      'el-icon-top': data.sort && data.sort === 'ASC',
                      'el-icon-bottom': data.sort && data.sort === 'DESC'
                    }
                  }), h(
                    'span', {}, data.name), h(
                    'img', {
                      attrs: {
                        src: setimg
                      },
                      style: {
                        'cursor': 'pointer'
                      },
                      on: {
                        click: () => {
                          this.handleToolbarClick(data)
                        }
                      }
                    })
                  ])
                }
              }
            })
          }
        }
        resolve(cols)
      })
    },
    mockList (rowData) {
      return new Promise(resolve => {
        resolve(rowData)
      })
    },
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值