vxe-table使用(第一节)

vxe-table 一个全功能的 Vue 表格,满足绝大部分对 Table 的一切需求,与任意组件库完美兼容
因为公司项目需求,需要跟大数据还有表格汇总打交道,刚开始用的是组件element-ui,随着项目需求的增加,element-ui无法满足我所需要的,这个时候 vxe-table 进入了我的视线,接触了之后才发现他的功能是真的强大。

基础类型(大概的属性跟性能)
1、表格的边框(有三种形式)

<vxe-table :data="tableData"  border=true></vxe-table>

border=none 去掉外部边框
border=false 只显示外边框
border=true 显示所有边框
不设置默认 border=false 只显示外边框 这三种样式可以解决大部分表格边框的样式需求

2、每一列文字的方向 (居左、居中、居右)

<vxe-table  :align="allAlign" :data="tableData"></vxe-table>

设置 属性 align “left”“center”“right”

3、序号 、列宽 、表格高度
序号
系统设置序号 type=seq 开启序号列

<vxe-table :data="tableData"  type=seq>
	<vxe-table-column type="seq" width="60"></vxe-table-column>
</vxe-table>

自定义起始序号 :seq-config="{startIndex: 100}"

<vxe-table :seq-config="{startIndex: 100}" :data="tableData">
	<vxe-table-column type="seq" title="序号" width="60"></vxe-table-column>
</vxe-table>

自定义方法 :seq-config="{seqMethod: seqMethod}"

<vxe-table :seq-config="{seqMethod: seqMethod}" :data="tableData">
	<vxe-table-column type="seq" title="序号" width="60"></vxe-table-column>
</vxe-table>

在vue的method 写一个seqMethod 方法

列宽
通过设置 width 参数,支持固定像素、百分比、自适应等,如果不设置则全部均匀分配
(注:不应该全部都使用固定像素,应该当所有列加起来的宽度小于表格宽度时,就会出现空白区,可以配合 “%” 或 “min-width” 实现等比例缩放) 不设置宽度即为自适应

通过设置 vxe-table的resizable 属性启用列宽拖动功能

当一个表格高度需要自适应的时候可以设置为最大高度 vxe-table 设置 max-height=“200” 如果设置 max-height,当内容为达到最大高度时会自适应 max-height=“100%” 也可以设置相对于父容器的百分比

4、每一个单元格内容放不下时显示 此为 vxe-table-column 的属性

当内容或表头超过隐藏时显示为省略号,show-overflow 和 show-header-overflow
ellipsis 当内容超过时显示为省略号
title 当内容超过时显示为省略号并用原生 title 显示
tooltip 当内容超过隐藏时显示为省略号并用 tooltip 显示
还可以通过 enterable 开启鼠标是否可进入到 tooltip 中

有点类似与 element-ui 但vxe-table显示的形式较多

5、斑马线条纹 (注:在可编辑表格场景下,临时插入的数据不会有斑马纹样式)、高亮

 <vxe-table stripe highlight-current-row highlight-hover-row :data="tableData"></vxe-table>

缺点:没有element-ui 可以自定义斑马线的颜色 高亮的颜色

高亮

highlight-hover-row 鼠标移到行是否要高亮显示 boolean 布尔值
highlight-current-row 是否要高亮当前行 boolean 布尔值
highlight-hover-column 鼠标移到列是否要高亮显示 boolean 布尔值
highlight-current-column 是否要高亮当前列 boolean 布尔值

使用 highlight-current-row 显示高亮行;用户操作点击选项时会触发事件 current-change

6、单元格的样式
行的样色、单元格样式,表头的样式、表尾的样式、全部都可以完全自定义
(注:当自定义样式之后可能会覆盖表格的样式,比如选中行…等,记得自行处理好相关样式)

vxe-table的属性

:header-cell-class-name 表头的样式
:row-class-name 行的样色
:cell-class-name 列的样式

:header-cell-style 表头的动态样色
:row-style 行的动态样色
:cell-style 列的动态样色

隐藏表头 :show-header=“false”

7、固定表头和列
当纵向内容过多时,固定表头就非常有用了,通过设置 height 参数
vxe-table 设置属性 height=“400”

固定列,通过设置 fixed 参数
当横向内容过多时,将列固定在左右两侧 如果列宽足够的情况下,固定列不会浮动
在最左边的 vxe-table-column 设置 fixed=“left” 属性
在最右边的 vxe-table-column 设置 fixed="right"属性

8、表头分组

当数据结构比较复杂的时候,可以使用多级表头显示更加直观 相当于在 vxe-table-column 在套一层 vxe-table-column

<vxe-table-column title="基本信息">
    <vxe-table-column type="seq" width="60"></vxe-table-column>
    <vxe-table-column field="name" title="Name"></vxe-table-column>
 </vxe-table-column>

注:如果使用了分组表头,则需要按组来设置固定列,且固定列必须是在左右两侧位置,不允许跨列

9、 单选框 复选框

单选框 vxe-table-column type属性设置为 radio

<vxe-table-column type="radio" width="60"></vxe-table-column>

改变单选框所在列的表头

 <vxe-table-column type="radio" width="60">
    <template v-slot:header>
      <vxe-button type="text">取消</vxe-button>
    </template>
  </vxe-table-column>

单选表格,用户手动选中时会触发事件 vxe-table 属性 radio-change 事件

checkMethod 方法控制 checkbox 是否允许用户手动选中,还可以配置 labelField 列显示属性

 <vxe-table
          border
          ref="xTable2"
          height="300"
          :radio-config="{labelField: 'name', checkMethod}"
          :data="tableData">
          <vxe-table-column type="radio" title="请选择" width="100"></vxe-table-column>
          <vxe-table-column field="sex" title="Sex"></vxe-table-column>
          <vxe-table-column field="age" title="Age"></vxe-table-column>
          <vxe-table-column field="address" title="Address" show-overflow></vxe-table-column>
        </vxe-table>

  checkMethod ({ row }) {
        return row.age > 26
  }

默认选中,通过指定 checkRowKey 设置默认选中的行,指定默认值需要有 row-id

<vxe-table
          border
          height="300"
          row-id="id"
          :data="tableData"
          :radio-config="{checkRowKey: '2'}">
          <vxe-table-column type="radio" width="60"></vxe-table-column>
          <vxe-table-column field="name" title="Name"></vxe-table-column>
          <vxe-table-column field="sex" title="Sex"></vxe-table-column>
          <vxe-table-column field="address" title="Address" show-overflow></vxe-table-column>
</vxe-table>

row-id=‘属性名或者参数名’ checkRowKey: ‘应该是哪个属性名或者参数名默认选中’

复选框

vxe-table-column type属性设置为 checkbox
	<vxe-table-column type="checkbox" width="60">
</vxe-table-column>

多选表格,用户手动勾选时会触发事件 checkbox-change

可以通过 checkMethod 方法控制 checkbox 是否允许用户手动勾选,还可以配置 labelField 列显示属性

<vxe-table
          border
          ref="xTable2"
          :data="tableData"
          :checkbox-config="{labelField: 'name', checkMethod}">
          <vxe-table-column type="checkbox" title="All"></vxe-table-column>
          <vxe-table-column field="sex" title="Sex"></vxe-table-column>
          <vxe-table-column field="age" title="Age"></vxe-table-column>
          <vxe-table-column field="address" title="Address" show-overflow></vxe-table-column>
</vxe-table>

checkMethod ({ row }) {
     return row.age > 26
}

通过配置 trigger 设置触发源,使用渲染最快的 checkField 属性绑定方式 点击行也选中

vxe-table 添加 属性 :checkbox-config="{checkField: ‘checked(属性名)’, trigger: ‘row’}"
每个列表的字段都有 checked(也可以是其他的名字 boolean值) 为false
通过指定 checkRowKeys 设置默认选中的行,指定默认值需要有 row-id

<vxe-table
          border
          highlight-hover-row
          row-id="id"
          :data="tableData"
          :checkbox-config="{checkRowKeys: ['2', '3']}"
          :radio-config="{labelField: 'name'}">
          <vxe-table-column type="checkbox" width="60"></vxe-table-column>
          <vxe-table-column type="radio" width="300" title="Name"></vxe-table-column>
          <vxe-table-column field="sex" title="Sex"></vxe-table-column>
          <vxe-table-column field="age" title="Age"></vxe-table-column>
          <vxe-table-column field="address" title="Address" show-overflow></vxe-table-column>
</vxe-table>

10、 排序

通过给需要排序功能的列加上 sortable 属性可以支持排序,

<vxe-table
          border
          highlight-hover-row
          ref="xTable"
          height="300"
          :data="tableData">
          <vxe-table-column type="seq" width="60"></vxe-table-column>
          <vxe-table-column field="name" title="Name" sortable></vxe-table-column>
          <vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
          <vxe-table-column field="sex" title="Sex" sortable></vxe-table-column>
          <vxe-table-column field="age" title="Age" sortable></vxe-table-column>
    	 <vxe-table-column field="time" title="Time" sortable></vxe-table-column>
</vxe-table>

还可以通过设置 sort-by 多字段进行排序

<vxe-table
          border
          highlight-hover-row
          height="300"
          :data="tableData">
     <vxe-table-column field="time" title="Time" sortable :sort-by="['time', 'name']"></vxe-table-column>
</vxe-table>

如果是服务端排序,只需加上 remote-sort 和 sort-change 事件就可以实现 两种方法

<vxe-table
          border
          highlight-hover-row
          height="300"
          :data="tableData"
          @sort-change="sortChangeEvent">
          <vxe-table-column type="seq" width="60"></vxe-table-column>
          <vxe-table-column field="name" title="Name" sortable :sort-method="sortNameMethod"></vxe-table-column>
          <vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
          <vxe-table-column field="sex" title="Sex" sortable></vxe-table-column>
          <vxe-table-column field="age" title="Age" sortable></vxe-table-column>
          <vxe-table-column field="time" title="Time" sortable></vxe-table-column>
 </vxe-table>
sortNameMethod (a, b) {
     // 例如:名称不区分大小写的排序
       var v1 = (a.name || '').toLowerCase()
       var v2 = (b.name || '').toLowerCase()
       return v1 < v2 ? -1 : v1 > v2 ? 1 : 0
  },
 sortChangeEvent ({ column, property, order }) {
      console.info(property, order)
 }

还可以通过调用 sort 方法实现手动排序

通过点击表头排序,通过 defaultSort 默认排序、通过配置 trigger 设置触发源

<vxe-table
          border
          highlight-hover-row
          highlight-hover-column
          height="300"
          :data="tableData"
          :sort-config="{trigger: 'cell', defaultSort: {field: 'age', order: 'desc'}}"
          >
          <vxe-table-column type="seq" width="60"></vxe-table-column>
          <vxe-table-column field="name" title="Name"></vxe-table-column>
          <vxe-table-column field="nickname" title="Nickname" sortable></vxe-table-column>
          <vxe-table-column field="sex" title="Sex" sortable></vxe-table-column>
          <vxe-table-column field="age" title="Age" sortable></vxe-table-column>
          <vxe-table-column field="time" title="Time" sortable></vxe-table-column>
</vxe-table>

11、 筛选

通过设置 filters 属性和 filter-method 方法可以支持列筛选功能,可以通过 filter-multiple=false 设置为单选
如果是服务端筛选,只需加上 filter-config={remote: true} 和 filter-change 事件就可以实现
如果是动态数据请配合 filter 方法,参数 filters 不支持动态数据
context 对象(查看高级用法):
changeOption(event, checked, option) 更新选项的状态
confirmFilter() 确认筛选
resetFilter() 清除筛选条件

跟element-ui的筛选类似

12 空数据 加载中 HTML标签

不管是element-ui还是 vxe-table 在列表无数据的时候显示的样式比较单一
所以提供了一种 插槽 slot=empty

<vxe-table
          border
          :loading="loading"
          :data="tableData">
          <vxe-table-column type="seq" width="60"></vxe-table-column>
          <vxe-table-column field="name" title="Name"></vxe-table-column>
          <vxe-table-column field="sex" title="Sex"></vxe-table-column>
          <vxe-table-column field="age" title="Age"></vxe-table-column>
          <vxe-table-column field="address" title="Address" show-overflow></vxe-table-column>
          <template v-slot:empty>
            <span style="color: red;">
              <img src="static/other/img2.gif">
              <p>没有更多数据了!</p>
            </span>
          </template>
</vxe-table>

此插槽 slot 可以放自己想要的动静态样式 而且无数据并且横向有滚动条的时候 此样式会保持一种居中的状态

加载中也就是相当于添加了一个loading

<vxe-table
          border
          highlight-hover-row
          height="300"
          :loading="loading"
          :data="tableData">
          <vxe-table-column type="seq" width="60"></vxe-table-column>
          <vxe-table-column field="name" title="Name" sortable></vxe-table-column>
          <vxe-table-column field="sex" title="Sex"></vxe-table-column>
          <vxe-table-column field="age" title="Age"></vxe-table-column>
          <vxe-table-column field="address" title="Address" show-overflow></vxe-table-column>
</vxe-table>

判断变量 loading是true还是false

HTML标签 vxe-table-column 的type类型改为 html

<vxe-table-column field="describeHtml" type="html" title="HTML 标签"></vxe-table-column>

13 格式化内容(比如日期 金额 银行卡号 数值)
局部自定义 formatter 格式化内容
(注:formatter 只会在指定的 field 值发生改变时触发格式化,如果想要多字段关联变化请使用自定义模板)

全局格式化内容,基于 xe-utils 函数库挂载方法进行数据处理,会在渲染的时候自动调用
(用于实现业务中统一的格式化处理,这对于很多场景非常有用,减少很多不必要的重复代码)

<vxe-table
          border
          :data="tableData">
          <vxe-table-column type="seq" width="60"></vxe-table-column>
          <vxe-table-column field="date" title="转日期" width="180" formatter="formatDate"></vxe-table-column>
          <vxe-table-column field="time" title="转日期格式" width="140" :formatter="['formatDate', 'yyyy-MM-dd']"></vxe-table-column>
          <vxe-table-column field="amount" title="格式化金额" formatter="formatAmount"></vxe-table-column>
          <vxe-table-column field="bankCard" title="银行卡" width="180" formatter="formatBankcard"></vxe-table-column>
          <vxe-table-column field="num7" title="截取2位数" formatter="formatCutFixed"></vxe-table-column>
          <vxe-table-column field="num7" title="四舍五入2位数" formatter="formatFixed"></vxe-table-column>
          <vxe-table-column field="sex" title="格式化性别" :formatter="['formatSelect', sexList]"></vxe-table-column>
 </vxe-table>

// 自定义全局的格式化处理函数

XEUtils.mixin({
// 格式化下拉选项

formatSelect (cellValue, list) {
let item = list.find(item => item.value === cellValue)
return item ? item.label : ‘’
},
// 格式化日期,默认 yyyy-MM-dd HH:mm:ss

  formatDate (cellValue, format) {
    return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
  },
  // 格式金额,默认2位数
  formatAmount (cellValue, digits) {
    return XEUtils.commafy(cellValue, { digits: digits || 2 })
  },
  // 格式化银行卡,默认每4位隔开
   formatBankcard (cellValue) {
        return XEUtils.commafy(cellValue, { spaceNumber: 4, separator: ' ' })
      },
  // 四舍五入,默认两位数
  formatFixed (cellValue, digits) {
    return XEUtils.toNumber(cellValue).toFixed(digits || 2)
  },
  // 截取小数,默认两位数

formatCutFixed (cellValue, digits) {
return XEUtils.toFixedString(cellValue, digits || 2)
}
})

14、单元格事件绑定

@header-cell-click 表头单元格单机

 headerCellClickEvent ({ row, rowIndex, column, columnIndex }, event) {
        console.log(`表头单元格点击${column.title}`)
},

@header-cell-dblclick 表头单元格双击

headerCellDBLClickEvent ({ row, rowIndex, column, columnIndex }, event) {
       console.log(`表头单元格双击${column.title}`)
},

@cell-click 单元格点击

cellClickEvent ({ row, rowIndex, column, columnIndex }, event) {
       console.log(`单元格点击${column.title}`)
},

@cell-dblclick 单元格双击

cellDBLClickEvent ({ row, rowIndex, column, columnIndex }, event) {
     console.log(`单元格双击${column.title}`)
},

@cell-mouseenter 鼠标进入单元格

cellMouseenterEvent ({ row, rowIndex, column, columnIndex }, event) {
      console.log(`鼠标进入单元格${column.title}`)
},

@cell-mouseleave鼠标离开单元格

  cellMouseleaveEvent ({ row, rowIndex, column, columnIndex }, event) {
        console.log(`鼠标离开单元格${column.title}`)
   }
  • 13
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
vxe-table是一个基于vue的表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、模态窗口、自定义模板、灵活的配置项、丰富的扩展插件等... 设计理念: 面向现代浏览器,高效的简洁 API 设计 模块化表格、按需加载、插件化扩展 为单行编辑表格而设计,支持增删改查及更多扩展,强大的功能的同时兼具性能 功能: Basic table (基础表格) Grid (高级表格) Size (尺寸) Striped (斑马线条纹) Table with border (带边框) Cell style (单元格样式) Column resizable (列宽拖动) Maximum table height (最大高度) Resize height and width (响应式宽高) Fixed column (固定列) Grouping table head (表头分组) Highlight row and column (高亮行、列) Table sequence (序号) Radio (单选) Checkbox (多选) Sorting (排序) Filter (筛选) Rowspan and colspan (合并行或列) Footer summary (表尾合计) Import (导入) Export (导出) Print (打印) Show/Hide column (显示/隐藏列) Loading (加载中) Formatted content (格式化内容) Custom template (自定义模板) Context menu(快捷菜单) Virtual Scroller(虚拟滚动) Expandable row (展开行) Pager(分页) Form(表单) Toolbar(工具栏) Tree table (树形表格) Editable CRUD(增删改查) Validate(数据校验) Data Proxy(数据代理) Keyboard navigation(键盘导航) Modal window(模态窗口) Charts(图表工具) 更新日志: v4.0.20 table 修改单选框、复选框获取值错误问题 grid 修复 KeepAlive 中报错问题

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值