iview UI Table 使用总结

本文详细介绍了Iview UI框架中Table组件的高级应用,包括动态改变表头名称、解决带边框表格的滚动条问题及嵌套表格的实现。通过自定义列头显示、调整样式和使用渲染API,提升数据展示的灵活性与美观性。

表格是展示数据的一种常用的方式,下面简要说一下在一些特定场景下对Iview 中 Table组件的使用

场景一

场景简述

表头中的某一个列的名字需要根据Table组件外部的变量进行关联,外部变量选取不同的值,则表头中某一列显示不同的名字

实现
  • 使用column中的renderHeaderAPI
  • renderHeader自定义列头显示内容,使用 Vue 的 Render 函数。传入两个参数,第一个是 h,第二个为对象,包含 columnindex,分别为当前列数据和当前列索引。
<Table stripe ref="currentRowTable" :columns="columns" :data="data"></Table>
columns: [
        {
            type: 'index',
            title: '序号',
            width: 60,
            align: 'center',
        },
        {
            title: '姓名',
            key: 'name',
            align: 'center',
            render: (h, params) => {
                return h('Input', {
                    props: {
                        type: 'text',
                        value: this.data[params.index].name,
                    },
                    on: {
                        'on-blur': (event: any) => {
                            this.data[params.index].name = event.target.value;
                        },
                    },
                });
            },
        },
        {
            title: '出生年月',
            key: 'birthday',
            align: 'center',
            render: (h, params) => {
                return h('DatePicker', {
                    props: {
                        type: 'month',
                        value: this.data[params.index].birthday,
                    },
                    on: {
                        'on-change': (event) => {
                            // event 即为日期字符串值
                            this.data[params.index].birthday = event;
                        },
                    },
                });
            },
        },
        {
            title: '数量或体积',
            key: 'numbers',
            align: 'center',
            width: 120,
            // 动态根据外部type变量来替换title的名字
            renderHeader: (h: any, params: any) => {
                const title = this.formValidate.type === '' ? '数量或体积' :
                    this.formValidate.type === '0' ? '数量(枚)' :
                        '体积(L)';
                return h('span', title);
            },
            render: (h: any, params: any) => {
                return h('Input', {
                    props: {
                        type: 'text',
                        value: (this as any).data[params.index].numbers,
                    },
                    on: {
                        'on-blur': (event: any) => {
                            (this as any).data[params.index].numbers = event.target.value;
                        },
                    },
                });
            },
        },
    ],

    data: [
        {
            name: 'test',
            birthday: '1998-06',
            numbers: 0
        },
    ];

场景二

场景简述

截止到目前使用iview@3.1.2版本中,如果给Table组件添加border(是否显示纵向边框)属性时,当table暂无数据时,会出现横向滚动条.

解决方案
  1. 简介粗暴的话直接去掉该属性
  2. 当为表格添加纵向边框时,由于宽度为定值,导致出现滚动条,可以为表格里面的每一列设置box-sizing: border-box

场景三

场景简述

有时候会使用到内嵌表格

实现
  1. 内嵌表格去掉表头 show-header Table 设置为 false
  2. 使用render API
<Table :columns="columns" :data="data"></Table>
columns: [
        {
            type: 'index',
            title: '序号',
            width: 60,
            align: 'center',
        },
        {
            title: '内嵌表格',
            key: 'table',
            align: 'center',
            render: (h, params) => {
                return h('Table', {
                    props: {
                        columns: this.data[params.index].columns,
                        data: this.data[params.index].data,
                        showHeader: false // 不展示内嵌表格的表头
                    },
                });
            },
        },
    ],

    data: [
        {
            columns: [
            	{
                	title: '姓名',
                    key: 'name',
                    align: 'center',
                },
                {
                	title: '年龄',
                    key: 'age',
                    align: 'center',
                }
            ],
            data: [
            	{
                	name: 'test',
                    age: 10
                }
            ]
        },
    ];
对于使用 iView UI 的列表表格(table)设计成树形列表,你可以按照以下步骤进行操作: 1. 数据准备:准备一个包含父子关系的数据源,每个节点需要包含一个唯一的标识符(id),一个父节点标识符(parentId),以及其他你需要显示的字段。 2. 组件配置:在使用 iView UI 的表格组件(Table)时,你需要配置相关的属性和事件。 - 配置列(columns):根据你的需求配置表格的列,包括树形列和其他列。需要注意,在树形列中,你可以使用插槽(slot)自定义节点的展示方式。 - 配置数据(data):将数据源绑定到表格的数据属性上。 - 配置展开行(expandedRowKeys):为了实现树形结构的展开与折叠功能,你需要设置一个数组来存储已展开的行的标识符。 - 配置行点击事件(row-click):当点击行时触发的事件,你可以在事件处理函数中切换行的展开状态。 3. 数据处理:根据父子关系构建树形结构的数据,可以使用递归或循环来处理数据。 - 遍历数据源,将每个节点与其父节点关联起来。 - 将具有相同父节点标识符的节点归类到一个数组中,作为父节点的子节点。 - 递归调用该方法,直到所有节点都被处理完毕。 4. 展开与折叠:通过点击行来展开或折叠子节点。 - 在行点击事件处理函数中,判断当前行是否已展开。 - 如果已展开,则将其从已展开行的数组中移除。 - 如果未展开,则将其加入已展开行的数组中。 - 更新表格的展开行属性。 以上是将 iView UI 的列表表格设计成树形列表的一般步骤,请根据实际需求进行具体的配置和数据处理。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RI Code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值