Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用


Posted in Javascript onApril 11, 2019

render-header

render-header在官方文档中的介绍是这样的:

参数 说明 类型 可选值 默认值
render-header 列标题 Label 区域渲染使用的 Function Function(h, { column, $index })

修改列标题样式

1.在列标题后面加一个图标。

以element-ui官方文档一个table表格为例,我们在地址的后面加一个定位标志的图标,代码如下:

<template>
 <el-table
 :data="tableData2"
 style="width: 100%"
 :row-class-name="tableRowClassName">
 <el-table-column
  prop="date"
  label="日期"
  width="180">
 </el-table-column>
 <el-table-column
  prop="name"
  label="姓名"
  width="180">
 </el-table-column>
 <el-table-column
  prop="address"
  label="地址" :render-header="renderHeader"> // 加入render事件
 </el-table-column>
 </el-table>
</template>

<style>
 .el-table .warning-row {
 background: oldlace;
 }

 .el-table .success-row {
 background: #f0f9eb;
 }
</style>

<script>
 export default {
 methods: {
  tableRowClassName({row, rowIndex}) {
  if (rowIndex === 1) {
   return 'warning-row';
  } else if (rowIndex === 3) {
   return 'success-row';
  }
  return '';
  },
  // render 事件
  renderHeader (h,{column}) { // h即为cerateElement的简写,具体可看vue官方文档
  return h(
   'div',
   [ 
   h('span', column.label),
   h('i', {
    class:'el-icon-location',
    style:'color:#409eff;margin-left:5px;'
   })
   ],
  );
  }
 },
 data() {
  return {
  tableData2: [{
   date: '2016-05-02',
   name: '王小虎',
   address: '上海市普陀区金沙江路 1518 弄',
  }, {
   date: '2016-05-04',
   name: '王小虎',
   address: '上海市普陀区金沙江路 1518 弄'
  }, {
   date: '2016-05-01',
   name: '王小虎',
   address: '上海市普陀区金沙江路 1518 弄',
  }, {
   date: '2016-05-03',
   name: '王小虎',
   address: '上海市普陀区金沙江路 1518 弄'
  }]
  }
 }
 }
</script>

效果如下:

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

2.在列标题后面添加一个单选框

还是以上面的代码为例,只写关键代码:

...
// render 事件
renderHeader (h,{column}) { // h即为cerateElement的简写,具体可看vue官方文档
 return h(
 'div',
 [ 
  h('span', column.label),
  h('el-checkbox',{
  style:'margin-left:5px',
  on:{
   change:this.select // 选中事件 
  }
  })
 ],
 );
},
// 添加选中事件
select (data) {
 console.log(data);
}
...

效果如下:

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

3.在表头添加一个Tooltip

我们经常会遇到一些奇怪的需求,但是即使再奇怪我们也不能认输,现在有一个需求,要在列表表题后面添加一个提示,我们开始尝试着做:

还是以上面的代码为例,刚开始我想直接用‘el-tooltip',应该不是很难,然后就是这样:

...
renderHeader (h,{column}) {
 return h(
 'div',
 [ 
  h('span', column.label),
  h('el-tooltip',[
  h('i', {
   class:'el-icon-question',
   style:'color:#409eff;margin-left:5px;'
  })
  ],{
  content: '这是一个提示'
  })
 ]
 );
}
...

运行后发现,基本样式出来了,但是提示没有

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

根据element-ui 关于tooltip的文档,我发现不管是effect, content还是placement对tooltip都不管用,既然硬上不管用,就曲线救国,通过组件的方法,先造个轮子再走路

// 写一个PromptMessage的组件,并全局注册
<template>
 <div class="tooltip">
 <el-tooltip effect="dark" placement="right">
  <div slot="content"> // 插槽,可提供多行的提示信息
  <p v-for="item in messages" :key="item">
   {{item}}
  </p>
  </div>
  <i class="el-icon-question" style="color:#409eff;margin-left:5px;font-size:15px;"></i>
 </el-tooltip>
 </div>
</template>

<script>
 export default {
 props:['messages']
 };
</script>

然后在render-header事件中使用组件

...
renderTip (h,{column}) {
 return h(
 'div',{
  style:'display:flex;margin:auto;'
 },
 [
  h('span', column.label),
  h('prompt-message', {
  props: {messages: ["这是住址信息"]}
  })
 ]
 );
}
...

这次我们发现,果然造的轮子还是挺不错的

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

JSX语法

或许你会发现,这个原生的createElement 写起来并不简单,而且很费事,我们也可以采用JSX的方式,这个在Vue官方文档中有提到

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

查看文档,可以找到安装使用的方法

Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用

安装完成后想要再实现tooltip就简单了

...
renderTip (h,{column}) {
 return (
 <el-tooltip class="tooltip" effect="dark" placement="right">
  <ul slot="content">
  <li>这是第一个提示</li>
  <li>这是第二个提示<li>
  </ul>
  <i class="el-icon-question"></i>
 </el-tooltip>
 );
}
...

这样看着很好理解,写起来也很方便

补充:

最近有个需求,需要在每次对el-table的单项进行勾选时,使用@select-change去调取后台接口,更改表格数据。

然而,el-table的selection列有个大bug。

首先,获取后的数据对于el-table的selection列来说,没有字段props可以去接收,这就导致没有数据是选中的,会直接触发@select-change方法,回调参数val为[]。

其次,selection需要使用toggleSelection方法去更改,当更改时,又一次触发@select-change方法,这显然不符合需求。

因此,需要自定义table的表头信息,设置为el-checkbox。

代码如下

// 自定义表头select
 renderHeader(h, {column, $index}) {
  return h("span", {}, [
  h('el-checkbox',{
   props: {
   checked: this.allchecked 
   },
   on:{
   change: this.updateAllSelected // 选中事件 
   }
  })]);
 },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery以JSON方式提交数据到服务端示例代码
May 05 Javascript
浏览器兼容性问题大汇总
Dec 17 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
Dec 29 Javascript
angular.js分页代码的实例
Jul 27 Javascript
jQuery简单设置文本框回车事件的方法
Aug 01 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
Jan 04 Javascript
最常见和最有用的字符串相关的方法详解
Feb 06 Javascript
ES6/JavaScript使用技巧分享
Dec 14 Javascript
JS中数组与对象的遍历方法实例小结
Aug 14 Javascript
微信小程序如何使用canvas二维码保存至手机相册
Jul 15 Javascript
vue点击自增和求和的实例代码
Nov 06 Javascript
微信小程序swiper使用网络图片不显示问题解决
Dec 13 Javascript
如何检查一个对象是否为空
Apr 11 #Javascript
vue项目创建并引入饿了么elementUI组件的步骤
Apr 11 #Javascript
重学JS 系列:聊聊继承(推荐)
Apr 11 #Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 #Javascript
详解用场景去理解函数柯里化(入门篇)
Apr 11 #Javascript
Vue开发Html5微信公众号的步骤
Apr 11 #Javascript
跟混乱的页面弹窗说再见
Apr 11 #Javascript
You might like
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
php的socket编程详解
2016/11/20 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
java script编程起步(第三课)
2007/01/10 Javascript
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
python区块及区块链的开发详解
2019/07/03 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
毕业自我鉴定书
2014/03/24 职场文书
保护环境建议书400字
2014/05/13 职场文书
公司应聘自荐书
2014/06/14 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
python如何进行基准测试
2021/04/26 Python
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL