Vue——render函数在ElementUi中的应用

1 篇文章 0 订阅
vue的render函数在日常开发中被广泛应用,今天以ElementUI中的table表头重构为引,实际应用一下借助render函数实现表头搜索,不足之处请多多指教!
首先引入官方demo
<el-table :data="tableData" style="width: 100%" :border="true">
    <el-table-column prop="date" label="日期" min-width="20%" align="center">
    </el-table-column>
    <el-table-column prop="name" label="姓名" min-width="60%" align="center">
    </el-table-column>
    <el-table-column prop="address" label="地址" align="center">
    </el-table-column>
</el-table>
实现效果

这里写图片描述

之后为姓名列添加 :render-header=”renderHeader” 绑定render函数
<el-table-column :render-header="renderHeader" prop="name" label="姓名" min-width="60%" align="center" >
</el-table-column>
在methods中实现renderHeader方法
methods: {
    renderHeader (createElement) {
      let self = this
      return createElement('div', {
        domProps: {
          innerHTML: `
                <span class="span">姓名</span>
                <input type="text" class="input">
                `
        },
        style: {
          padding: '0',
          lineHeight: '1',
          marginTop: '5px',
          width: '100%'
        },
        on: {
          '!click': function (e) {
            let span = document.getElementsByClassName('span')[0]
            let input = document.getElementsByClassName('input')[0]
            span.style.display = 'none'
            input.style.display = 'inline-block'
            input.focus()
            event.stopPropagation()
          }
        }
      })
    }
  },
在less文件中配合实现DOM的展示和隐藏
.span {
     display: inline-block;
}
.input {
     display: none;
}
此时已经可以实现点击表头出现输入框

这里写图片描述

之后需要为其绑定input事件
on: {
   '!click': function (e) {
    let span = document.getElementsByClassName('span')[0]
    let input = document.getElementsByClassName('input')[0]
    span.style.display = 'none'
    input.style.display = 'inline-block'
    input.focus()
    event.stopPropagation()
  },
   input: function (event) {
     self.inputValue = event.target.value  // 在data中定义inputValue
  }
}
之后我们就可以监听data中的inputValue,实现一些列业务逻辑
watch: {
    inputValue: function () {
      console.log(this.inputValue)
    }
  }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值