iView表格(table)渲染(render)

零、render

1、语法

以下分别定义了:标签名称,(样式,事件等综合内容),显示内容

render: (h, params) => {
    return h('span', {
                style: {
                    color: '#FF7D41'
                },
                on: {
                    click: () => {
                        console.log(params)
                    }
                }
            }, '点击');
}

2、简单例子

render: (h, params) => {
    return h('span', 'hello');
}

3、同时显示多个内容

render: (h, params) => {
    return h('div', [
        h('span', params.row.name),
        h('span', ' ('+params.row.age+')')
    ]);
}

4、对数据进行处理

在数据返回之前可以进行任何数据处理

1>时间格式转换
render: (h, params) => {
    let time = this.$moment(params.row.time).format('YYYY-MM-DD HH:mm:ss')
    return h('span', time);
}
2>数据处理:数组拼接字符串等
render: (h, params) => {
    let str = ''
    for (let i = 0, len = params.row.arr.length; i < len; i++) {
        str += `${params.row.arr[i].name}-${params.row.arr[i].age} | `
    }
    return h('span', str);
}
3>多情况判断
render: (h, params) => {
    if (params.row.age > 18) {
        return h('span', '未成年');
    }else {
        return h('span', '成年');
    }
}
render: (h, params) => {
    switch (params.row.num) {
        case 1:
            return h('span', '你');
            break;
        case 2:
            return h('span', '好');
            break;
        case 3:
            return h('span', '啊');
            break;
    }
}
4>点击事件
render: (h, params) => {
    return h('span', {               
                on: {
                    click: () => {
                        // 这里通常做路由跳转,弹窗显示,发送请求等
                    }
                }
            }, '点击');
}
5>样式处理:文本溢出以省略号显示
render: (h, params) => {
    return h('span', {
                style: {
                    display: 'inline-block',
                    width: params.column._width*0.9+'px',
                    overflow: 'hidden',
                    textOverflow: 'ellipsis',
                    whiteSpace: 'nowrap',
                }
            }, params.row.name);
}
6>悬浮以气泡显示内容
render: (h, params) => {
    return h('div', [
        h('Tooltip', {
                props: {
                    placement: 'top',
                }        
            }, [
                params.row.content, // 表格显示文字
                h('div', {
                        slot: 'content',
                        style: {
                            whiteSpace: 'normal'
                        }
                    }, params.row.content // 气泡内的文字
                )
            ])
    ]);
}
7>悬浮以气泡显示内容并添加表格显示图片
render: (h, params) => {
    return h('div', [
        h('Tooltip', {
                props: {
                    placement: 'top',
                }        
            }, [
                h('div',[
                    h('span', params.row.content),
                    h('img', {
                        attrs: {
                            // 图片需放在static文件夹下
                            src: '../../../static/img/calibration-tip.svg'
                        },
                        style: {
                            marginBottom: '3px'
                        }
                    })
                ]), // 表格列显示文字和图片
                h('div', {
                        slot: 'content',
                        style: {
                            whiteSpace: 'normal'
                        }
                    }, params.row.content // 气泡内的文字
                )
            ])
    ]);
}
8>显示图片
render: (h, params) => {
  return h('div', [
    h('img', {
      domProps: {
        'src': params.row.img
      },
      style: {
        display: 'block',
        width: '30px',
        height: '30px',
        borderRadius: '3px',
        // margin: '0 auto'
      },
    })
  ])
}

bug
注意:尽量不要在render和return之间做赋值操作,赋值操作及数据改变(i++)会触发iView的render的刷新机制,会不断刷新直到报错。
如果有点击事件,将这些操作都放在事件中进行处理。

一、特定样式

给某行,某列添加不同的背景色

通过属性 row-class-name 可以绑定一个方法,参数为rowindexrow会返回每一行的数据,可以通过判断每行的某个属性是否为自己想要的值来为这一行添加一个类名,再通过这个类名来添加样式。index会返回每行的索引,添加样式同理。

<Table :row-class-name="rowClassName" :columns="columnsRow" :data="dataRow"></Table>
.ivu-table .demo-table-row td{
    background-color: #2db7f5;
    color: #fff;
}
data () {
    return {
        columnsRow: [
            {
                title: 'Name',
                key: 'name'
            },
            {
                title: 'Age',
                key: 'age'
            }
        ],
        dataRow: [
            {
                name: 'lee',
                age: 18
            },
            {
                name: 'hello',
                age: 21
            }
        ],
    }   
},
methods:{
    rowClassName (row, index) {
        if (index === 1) {
            return 'demo-table-row';
        }
        if (row.age === 18) {
            return 'demo-table-row';
        }
        return '';
    }
}

通过给列 columns 设置字段 className 可以给某一列指定一个样式。

<Table :columns="columnsCol" :data="dataCol"></Table>
.ivu-table td.demo-table-column{
    background-color: #2db7f5;
    color: #fff;
}
data () {
    return {
        columnsCol: [
            {
                title: 'Name',
                key: 'name'
            },
            {
                title: 'Age',
                key: 'age',
                className: 'demo-table-column'
            }
        ],
        dataCol: [
            {
                name: 'lee',
                age: 18
            },
            {
                name: 'hello',
                age: 21
            }
        ],
    }    
},

二、滚动条

纵向滚动条

<Table height="200" :columns="columns" :data="data"></Table>

横向滚动条

当所有列的宽度超出table父元素或本身定义的宽度时出现

<Table width="800" border :columns="columns" :data="data"></Table>
columns: [
    {
        title: 'Name',
        key: 'name',
        width: 400,
    },
    {
        title: 'Age',
        key: 'age',
        minWidth: 500
    }
],

三、固定列

columns: [
    {
        title: 'Name',
        key: 'name',
        width: 100,
        fixed: 'left'
    },
    {
        title: 'Age',
        key: 'age',
        width: 100,
        fixed: 'right',
    }
],

四、多选

@on-selection-change,只要选中项发生变化时就会触发,返回值为 selection,已选项。

<Table @on-selection-change="getSelection" :columns="columns" :data="data"></Table>
columns: [
    {
        type: 'selection',
        width: 60,
        align: 'center'
    },     
    {
        title: 'Name',
        key: 'name',
    },
    {
        title: 'Age',
        key: 'age',
    }
],
methods:{
    getSelection (selection) {
        // 通过返回的已选择数组的长度来进行一些判断
        // 处理已选择数组,将已选项中的某些值拼接成字符串,发送给后台
    }
}

五、单选

<Table border highlight-row :columns="columns" :data="list" @on-current-change="selectSingleArticle"></Table>
methods:{
    selectSingleArticle (currentRow, oldCurrentRow) {
        // 当前行的数据和上一次选择的数据
    }
}

设置默认值

// 后台返回的标志为true, 则为默认值,设置选项的_highlight 为true即为默认值
res.data.forEach((item, index) => {
    if (item.flag === 'true') {        
        item._highlight = true
    }
})
this.list = res.data || []   

六、将多选变为单选

tableData:表格数据

选择

{
    title: '选中',
    align:'center',
    key: 'checkBox',
    render:(h,params)=>{
        return h('div',[
            h('Checkbox',{
                props:{
                    value:params.row.checkBox
                },
                on:{
                    'on-change':(e)=>{
                        this.tableData.forEach((items)=>{      //先取消所有对象的勾选,checkBox设置为false
                            this.$set(items,'checkBox',false)
                        });
                        this.tableData[params.index].checkBox = e;  //再将勾选的对象的checkBox设置为true
                    }
                }
            })
        ])
    }
},

获取

let id = this.tableData.filter( (item) => {
  return item.checkBox === true
})[0].id 

回显

for (let i = 0, len = this.tableData.length; i < len; i++) {
  if (this.tableData[i].flag === true) {
    this.tableData[i].checkBox = true;
    break;
  }                
}

样式统一调整

1、内容居中

.ivu-table th, .ivu-table td {
    text-align: center;
}

2、内容单元格高度

.ivu-table td {
    height: 37px;
}

3、背景色

.ivu-table-row-highlight td, .ivu-table-stripe .ivu-table-body tr.ivu-table-row-highlight:nth-child(2n) td, .ivu-table-stripe .ivu-table-fixed-body tr.ivu-table-row-highlight:nth-child(2n) td, tr.ivu-table-row-highlight.ivu-table-row-hover td{
  background-color:#FFF3F3;
}

4、右侧固定列样式

.ivu-table-fixed-right{
  box-shadow: -2px 2px 6px -2px rgba(0, 0, 0, 0.2);
  tr td, th {
    text-align: center;
  }
}

网站导航

网站导航

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,067评论 4 62
  • VBA订制工具栏 http://club.excelhome.net/thread-1047254-1-1.htm...
    大海一滴写字的地方阅读 2,242评论 0 0
  • 2081107 书名《当下的力量》 启迪我们摆脱痛苦,获得内心的力量。 (一)作者:埃克哈特·托利(Eckhart...
    靖艳陪娃读书阅读 740评论 0 0
  • 姓名:周立 zhou li 公司:宁波大发化纤有限公司 【日精进打卡第33天】 【知~学习】 (六项精进)大纲背...
    周立zhouli阅读 181评论 0 0
  • 虽然只是一个幻觉,但依然去想;想,这个词很讨厌。你截止不住自己的思绪,跟滚滚江水,一个波涛接着一个波涛,永不休歇!...
    弋夫阅读 449评论 1 1