iview table 点击是input(可编辑)的render函数中如何设置元素的样式(1)

一、iview实现table的可编辑

遇到同事请教的这个问题,没接触过iview,以为和element一样,只需要在table-column中使用作用域插槽即可,简单又方便,结果发现它居然是用reder函数进行渲染的,so,仔细琢磨一下,写了下面的demo,希望对大家有用。

多说无益上 代码:

<template>
  <div class="body">
    <i-table  border :columns="columns2" :data="data3"></i-table>
  </div>
</template>
 
<script>
  export default {
   data () {
        return {
                columns2: [
                     {
                        title: 'Name',
                        key: 'name'
                    },
                    {
                        title: 'Age',
                        key: 'age',
                           render: (h, params) => {
 
                            if (params.row.$isEdit) {
                            
                              return h('input', {
 
                                domProps: {
                                  value: params.row.age
                                },
                                on: {
                                  input: function (event) {
                                    params.row.age = event.target.value
                                  }
                                }
                              });
                            } else  {
                              
                              return h('div', params.row.age);
                            }
                        }
                    },
                    {
                        title: 'Address',
                        key: 'address'
                    },
                    {
                        title: 'Action',
                        key: 'action',
                        render: (h, params) => {
                            return h('Button', {
                                    props: {
                                        type: 'text',
                                        size: 'small'
                                    },
                                    on: {
                                      click: () => {
                                        if (params.row.$isEdit) {
                                          this.handleSave(params.row)
                                        } else {
                                          this.handleEdit(params.row)
                                        }
                                      }
                                    }
                                }, params.row.$isEdit ? '保存' : '编辑')
                        }
                    }
                ],
                data3: [
                    {
                        name: '哈哈',
                        age: 18,
                        address: '上海',
                        $isEdit: false
                    },
                    {
                        name: '啦啦',
                        age: 24,
                        address: '北京',
                        $isEdit: false
                    }
                ]
              }
      },
    methods: {
        handleEdit (row) {
            this.$set(row, '$isEdit', true)
          
        }, 
        handleSave (row) {
          this.$set(row, '$isEdit', false)
        }
    }

  }
</script>
 
<style>
</style>

在html5页面中,我们知道设置元素样式的方法有2种:一种是直接在元素标签中添加style属性并设置样式,另一种是给元素添加class属性然后给class属性设置样式。既然原生的html页面有这两种设置属性的方式,那么iview的render函数当然也可以这么给元素添加样式啦。

二、render函数添加样式的两种方法:

比如我想设置字体的颜色大小间距,如下图:


第一种方法:直接设置style属性

“操作”列的render函数如下代码:

{
            title: '操作',
            align: 'center',
            render: (h, params) => {
              return h('div', [
                h('span', {
                  style:{
                    fontSize: '14px',
                    padding: '5px 10px',
                    cursor: 'pointer',
                    color: '#fc1'
                  }
                }, '查看'),
              ]);
            }
          }

第二种方法:给元素设置class属性

 如果我想在鼠标移动到 “查看” 时改变字体的颜色,

那么就可以在.show后面加伪类,而第一种方法就做不到了,实现如下:

 注意:这里的style是不加作用域scoped的,如果加了class样式就不生效了。

class属性的其他用法

class属性有两种用法:
1.当类名是字符串时(如上面的的第二种方法):

 也可以绑定多个样式

2.当类名是对象时:

最后为了方便大家的沟通与交流请加QQ群: 625787746

请进QQ群交流:【IT博客技术分享群①】:https://jq.qq.com/?_wv=1027&k=DceI0140

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT博客技术分享

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

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

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

打赏作者

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

抵扣说明:

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

余额充值