vue3中使用vxe-table

在日常的项目开发中table往往不能满足我们的需求,我们就可借助vxe-table实现

vxe-table vxe-table文档

vxe-table是一个功能强大的 Vue 表格组件,它支持虚拟滚动列表作为其核心功能之一。下面是 vxe-table 的虚拟滚动列表功能的使用场景和优势:

使用场景

  1. 大数据量展示:当表格需要展示大量数据时,传统的表格渲染方式可能会导致页面卡顿、滚动不流畅等问题。虚拟滚动列表通过只渲染可见区域内的数据,大大提高了渲染性能,使得大数据量的展示变得更加流畅。
  2. 移动端和性能受限环境:在移动端设备或性能受限的环境中,资源通常较为紧张。虚拟滚动列表通过减少不必要的DOM操作和内存占用,优化了性能,提供了更好的用户体验。
  3. 固定列与表头:在需要固定列或表头的复杂表格布局中,虚拟滚动列表能够确保固定部分与滚动部分的正确对齐和显示,提高了表格的可读性和操作性。
  4. 高度自定义的表格:对于需要高度自定义样式、行为或交互的表格,vxe-table 提供了灵活的 API 和配置选项,结合虚拟滚动列表,可以实现既高性能又满足特定需求的表格。
优势 

  1. 性能优化:通过减少DOM节点的数量和避免不必要的渲染,虚拟滚动列表显著提高了表格的渲染性能和滚动流畅度。
  2. 内存占用少:虚拟滚动列表仅创建和维护可见区域内的DOM节点,大大降低了内存占用,对于大数据量或移动端设备尤为重要。
  3. 灵活的API与配置:vxe-table 提供了丰富的API和配置选项,使得开发者能够轻松实现复杂的表格需求,同时保持高性能。
  4. 良好的兼容性:vxe-table 兼容现代主流浏览器,能够满足不同场景下的使用需求。
  5. 活跃的社区支持:vxe-table 拥有活跃的社区和持续的开发支持,能够快速响应问题和提供解决方案,降低了使用风险。
  6. 易于集成与扩展:作为Vue组件,vxe-table 可以轻松地集成到Vue项目中,同时也支持自定义扩展,满足了项目的个性化需求。

 vxe-table 使用:

安装
npm install vxe-table
引入挂载 main.js/ts
 import { VXETable } from 'vxe-table'
 import 'vxe-table/lib/style.css'
 createApp(App).use(VXETable).mount('#app')
        
使用 
<vxe-table
      :data="tableData">
      <vxe-column type="seq" width="60"></vxe-column>
      <vxe-column field="name" title="Name"></vxe-column>
      <vxe-column field="sex" title="Sex"></vxe-column>
      <vxe-column field="age" title="Age"></vxe-column>
    </vxe-table>
虚拟滚动
  1. scroll-x 用于控制横向虚拟滚动,gt 当大于指定条数时自动启用,默认 60,如果 enabled=false 或者 gt=-1 则关闭虚拟滚动

  2. scroll-y 用于控制纵向虚拟滚动,gt 当大于指定条数时自动启用,默认 100,如果 enabled=false 或者 gt=-1 则关闭虚拟滚动

<template>
  <div>
    <vxe-table
      border
      show-overflow
      show-header-overflow
      show-footer-overflow
      show-footer
      height="400"
      :footer-method="footerMethod"
      :scroll-x="{enabled: true, gt: 15}"
      :scroll-y="{enabled: true, gt: 0}"
      :data="tableData">
      <vxe-column type="seq" width="100"></vxe-column>
      <vxe-column field="name" title="Name" width="150" sortable></vxe-column>
      <vxe-colgroup title="分类1">
        <vxe-column field="attr1" title="Attr1" width="100"></vxe-column>
        <vxe-column field="attr2" title="Attr2" width="100"></vxe-column>
        <vxe-column field="attr3" title="Attr3" width="100"></vxe-column>
      </vxe-colgroup>
      <vxe-column field="attr4" title="Attr4" width="100"></vxe-column>
      <vxe-column field="attr5" title="Attr5" width="150" sortable></vxe-column>
      <vxe-column field="attr6" title="Attr6" width="100"></vxe-column>
      <vxe-column field="attr7" title="Attr7" width="100"></vxe-column>
      <vxe-column field="attr8" title="Attr8" width="200" show-overflow></vxe-column>
      <vxe-column field="attr9" title="Attr9" width="100"></vxe-column>
      <vxe-column field="attr10" title="Attr10" width="100"></vxe-column>
      <vxe-colgroup title="分类2">
        <vxe-column field="attr11" title="Attr11" width="100"></vxe-column>
        <vxe-column field="attr12" title="Attr12" width="100"></vxe-column>
        <vxe-column field="attr13" title="Attr13" width="150" sortable></vxe-column>
        <vxe-column field="attr14" title="Attr14" width="100"></vxe-column>
        <vxe-column field="attr15" title="Attr15" width="100"></vxe-column>
      </vxe-colgroup>
    </vxe-table>
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { VxeTablePropTypes } from 'vxe-table'
import XEUtils from 'xe-utils'

interface RowVO {
  name: string
  attr1: number
  attr2: string
  attr3: string
  attr4: string
  attr5: string
  attr6: string
  attr7: string
  attr8: string
  attr9: string
  attr10: string
  attr11: string
  attr12: string
  attr13: string
  attr14: string
}

const tableData = ref<RowVO[]>([])

const sumNum = (list: RowVO[], field: string) => {
  let count = 0
  list.forEach(item => {
    count += Number(item[field])
  })
  return XEUtils.round(count, 2)
}

const footerMethod: VxeTablePropTypes.FooterMethod<RowVO> = ({ columns, data }) => {
  // 返回一个二维数组的表尾合计
  const footData = [
    columns.map((column: any, columnIndex: any) => {
      if (columnIndex === 0) {
        return '平均'
      }
      switch (column.field) {
        case 'attr1':
          return sumNum(data, 'attr1')
      }
      return '-'
    })
  ]
  return footData
}

setTimeout(() => {
  const mockList: RowVO[] = []
  for (let index = 0; index < 10000; index++) {
    mockList.push({
      name: 'Test' + index,
      attr1: index,
      attr2: 'a2-' + index,
      attr3: 'a3-' + index,
      attr4: 'a4-' + index,
      attr5: 'a5-' + index,
      attr6: 'a6-' + index,
      attr7: 'a7-' + index,
      attr8: 'a8-' + index,
      attr9: 'a9-' + index,
      attr10: 'a10-' + index,
      attr11: 'a11-' + index,
      attr12: 'a12-' + index,
      attr13: 'a13-' + index,
      attr14: 'a14-' + index
    })
  }
  tableData.value = mockList
}, 300)
</script>

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3使用vxe-table进行首字母排序可以按照以下步骤进行: 1. 安装vxe-table ```bash npm install vxe-table@next --save ``` 2. 导入vxe-table ```javascript import 'vxe-table/lib/style.css'; import VXETable from 'vxe-table'; import 'xe-utils'; import VXETablePluginElement from 'vxe-table-plugin-element'; ``` 3. 注册vxe-table ```javascript app.use(VXETable); app.use(VXETablePluginElement); ``` 4. 在table使用column.sortMethod属性来指定排序方法 ```html <vxe-table :data="tableData"> <vxe-table-column field="name" title="Name" :sortable="true" :sort-method="sortByName"></vxe-table-column> <vxe-table-column field="age" title="Age" :sortable="true"></vxe-table-column> </vxe-table> ``` 5. 在组件定义sortByName方法来实现按照首字母排序 ```javascript export default { data() { return { tableData: [ { name: 'Adam', age: 25 }, { name: 'Bob', age: 30 }, { name: 'Cindy', age: 20 }, { name: 'David', age: 35 }, { name: 'Emily', age: 28 }, ], }; }, methods: { sortByName(sortParams) { return sortParams.sortList.sort((a, b) => { const getValue = (row) => { let value = row.name; if (!value) { value = ''; } return value.toLowerCase(); }; let sortValue = 0; const valueA = getValue(a); const valueB = getValue(b); if (valueA > valueB) { sortValue = 1; } else if (valueA < valueB) { sortValue = -1; } return sortParams.order === 'desc' ? -sortValue : sortValue; }); }, }, }; ``` 此时,vxe-table会按照首字母顺序对表格数据进行排序。需要注意的是,如果表格数据存在空值,需要将空值转换为一个可比较的值,否则可能会出现排序错误的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值