iview使用render函数渲染嵌套表格

最近做项目遇到iview表格渲染,通过render函数来实现循环嵌套渲染表格及单元格内容,返回文字提示包含icon按钮的图标,当鼠标移到“复制”图标上时显示tooltip内容,单击实现复制,接下来就把遇到的问题总结一下。

1.初始化表格

 <!-- 表格 S --><Table v-if="hostsList && !error" border ref="selection"  :columns="columns" :data="hostsList"@on-selection-change="tableSelection"@on-select="tableSelect"></Table><!-- 表格 E -->

初始化data中返回的数据

 columns: [ //表格头部 信息  id hostname tags loc idc status{type: 'selection',width: 60,align: 'center', },{title: '机器名称',key: 'hostname',width: 200,render: (h, params) => {let data =params.row;let url = '';if(data.idc === 'uclcn' || data.idc === 'alicn' || data.idc === 'tencn') {url = `http://${data.hostname}:1988`} else {url = `http://${data.ip}:1988`}return h('a',{domProps:{href: url,target:'_blank'}},data.hostname)}},{title: '机器IP',key: 'ip',width:150,align: 'center',},{title: '机器类型',key: 'type',width:150,align: 'center',render: (h, params) => {console.log( 99999, h ,params)let data = params.row;let type = ''if (data.type == 'commodo') {type = '虚拟机'} else {type = '容器'}return h('div',{},type)}},{title: '节点',key: 'tags',minWidth:450,render: (h, params) => {let data =params.row.tags;let _this = thisreturn h('div', data.map( (item)=>{return h('div', {style: {// padding: '5px 0',// lineHeight: '24px',}},[h('a',{style:{display: 'inline-block',padding: '5px 0',lineHeight: '24px',fontSize: '12px',},on:{click: () => {let href = window.location.hreflet host = href.split('?')[0]window.location.href = host + '?tagstring=' + itemwindow.location.reload()}}}, item ),h('Poptip', {props: {trigger:"hover",placement: 'top',// 注意一定要添加该属性,否则表格会遮盖住气泡浮框transfer: true,content: '复制',// width: '20px',}},[  h('Icon', {class: 'ivu-icon ivu-icon-ios-copy-outline copyBtn1',style: {marginleft: '15px',cursor: 'pointer'},props: {type:"ios-copy-outline"},on: {click: () => {console.log(99999)//头部copy文本方法let Clipboard = this.base.Clipboard; //调用公共复制文本方法var clipboard = new Clipboard('.copyBtn1' , {text: function() {clipboard.destroy();return item;}});clipboard.on('success', function(e) {e.clearSelection();_this.$Message.success('复制成功~');});clipboard.on('error', (e)=>{clipboard.destroy();_this.$Message.error('复制失败,请手动复制~')});}}})])])}),)}},{title: '操作',key: 'action',width: 150,align: 'center',render: (h, params) => {return h('div', [h('Button', {props: {type: 'success',size: 'small'},style: {marginRight: '5px'},on: {click: () => {if(this.popup){ //第一个弹框是打开状态的时候什么也不做return;}//this.clickBindIP( params.row , params.index ); //传递给点击绑定事件let data = params.row;this.rename.isLayer = true;this.rename.lodVal = data.hostname;this.rename.id = data.id;this.rename.head = data.loc+'-' //新名字的头this.rename.tail = '.'+data.idc //新名字的尾部}}}, '改名'),h('Button', {props: {type: 'error',size: 'small'},on: {click: () => {//this.removeBindIP(params.row , params.index)this.$Message.info('您点击了重启按钮')}}}, '重启')]);}}],

2.render函数返回节点格式

iview表格的render函数作用是自定义渲染当前列,权限高于key,所以使用了render函数,那么表格的key值就无效了。render函数传入两个参数,第一个是 h,第二个是对象,包含 row、column 和 index,分别指当前单元格数据,当前列数据,当前是第几行。

具体用法:

render:(h,params) => {return h(" 定义的元素 ",{ 元素的性质 },"元素的内容"/[元素的内容])
}

1.返回单文本

如果是可以直接用的数据字段,直接把字段赋值给key值就可以了

{title: '机器IP',key: 'ip',width:150,align: 'center',},

2.返回自定义文本

使用return h函数返回

         {title: '机器名称',key: 'hostname',width: 200,render: (h, params) => {let data =params.row;let url = '';if(data.idc === 'uclcn' || data.idc === 'alicn' || data.idc === 'tencn') {url = `http://${data.hostname}:1988`} else {url = `http://${data.ip}:1988`}// 如果不做以上操作可直接使用return h函数返回return h('a',  // 元素名称{domProps:{href: url,target:'_blank'}// 为元素赋属性style: {fontSize: '14px'}// 为元素写样式,驼峰书写格式,值加“”}, // 元素性质on: {click: () => {}}, // 元素事件data.hostname // 元素内容)}},

3.返回html元素/多元素/嵌套元素

在单元格还要循环元素的话就在render h里使用map函数返回,然后内层再使用一个render h 函数返回循环内容。

返回html元素/多元素/嵌套元素时要记得在节点外加“[ ]”,不加的话渲染不出来,但也不会报错,“[ ]”中使用h函数逐层返回,不用再加’return’,格式同return h 函数

格式:
 h(" 定义的元素 ",{ 元素的性质 },"元素的内容"/[元素的内容])
render: (h, params) => {return h('a', [h('a',[h('Icon', {})])])
})
例:
{title: '节点',key: 'tags',minWidth:450,render: (h, params) => {let data =params.row.tags;let _this = thisreturn h('div', data.map( (item)=>{return h('div', { // 单元格中再渲染循环肉style: {// padding: '5px 0',// lineHeight: '24px',}},[ //此处"[]"是必须的h('a',{style:{display: 'inline-block',padding: '5px 0',lineHeight: '24px',fontSize: '12px',},on:{click: () => {let href = window.location.hreflet host = href.split('?')[0]window.location.href = host + '?tagstring=' + itemwindow.location.reload()}}}, item ),h('Poptip', {props: {trigger:"hover",placement: 'top',// 注意一定要添加该属性,否则表格会遮盖住气泡浮框transfer: true,content: '复制',// width: '20px',}},[  //此处"[]"是必须的h('Icon', {class: 'ivu-icon ivu-icon-ios-copy-outline copyBtn1',style: {marginleft: '15px',cursor: 'pointer'},props: {type:"ios-copy-outline"},on: {click: () => {console.log(99999)//头部copy文本方法let Clipboard = this.base.Clipboard; //调用公共复制文本方法var clipboard = new Clipboard('.copyBtn1' , {text: function() {clipboard.destroy();return item;}});// 复制成功                                                   clipboard.on('success', function(e) {e.clearSelection();_this.$Message.success('复制成功~');});// 复制失败                                                   clipboard.on('error', (e)=>{clipboard.destroy();_this.$Message.error('复制失败,请手动复制~')});}}})])])}),)}},

3.render中使用this

render中使用this会报undefined,所以要在起始处给this赋值

                 render: (h, params) => {let data =params.row.tags;let _this = this....})

iview使用render函数渲染嵌套表格相关推荐

  1. Render函数渲染页面

    Render是使用js的完全编程能力来渲染页面,即用js来构建DOM. 说明:render是一个方法,自带一个形参createElement(还有context..),这个参数也是一个方法,是用来创建 ...

  2. iview在render函数中添加Poptip提示

    前言: 在使用iview的table的时候删除一般为了防止误删,我们会用 poptip 气泡提示来进行操作二次限制,这里使用iview的table的render函数渲染直接加入 效果图: 实现代码: ...

  3. vue3 使用render函数渲染插槽,以Naive UI为例

    Vue3使用render函数渲染插槽,以Naive UI为例 网上有好多解释rende函数和插槽原理的文章,不可否认他们的水平都比我高,只是我这篇文章更加注重"术\法\道"中的术, ...

  4. iview(View UI)使用 Vue 的 Render 函数,自定义表格列头显示内容(renderHeader)

    开发中遇到这样一个需求,该项目用的是iview UI组件,需求是: 表格列头有一个字段和一个单位,两者样式不同,理想效果如下:"建筑面积四个字为18px.单位(㎡)为16px". ...

  5. iview 中 render函数与renderHeader函数

    {// 采用 renderHeader 函数时,title就不需要了// title: this.$route.query.type === '1' ? '退款编号' : ' ',key: 'refu ...

  6. 在iview中render函数使用Switch功能

    在使用iview开发过程中,遇到在table中加入switch的一个功能,在一番折腾之后,终于弄出来啦,啥也不多说直接上代码 render:(h,params)=>{return h('i-sw ...

  7. render注册一个链接组件_[vue]render函数渲染组件

    常规渲染组件 1.放到对应的插槽 2,不会覆盖 {{msg}} let login = { template: " login zujian " }; let vm = new V ...

  8. iview render函数(vue render函数)

    iview 的render函数就是vue的render函数,iview常用在表格里面自定义内容,下面来看render函数常用的配置: 1. h是createdElement的简写,有3个参数: 语法: ...

  9. iview使用之怎样通过render函数在table组件表头添加图标及判断多个状态

    在实际项目开发中,我们经常会用到各种各样的表格,比如在表格中填加下拉菜单,按钮,图标及可以根据状态显示对应文字等等,因为这段时间一直在做后台管理系统,所以表格用的就比较多,当然UI组件库我用的是ivi ...

最新文章

  1. 关于数组名与指针的相互转换
  2. smbus使用 树莓派_树莓派学习笔记——I2C使用 PCF8574 Python SMBUS
  3. Windows 技巧篇 - cmd的复制和粘贴功能
  4. P1064 金明的预算方案(分组背包)
  5. CentOS系统下docker的安装与卸载
  6. 对口高考计算机vf试题,计算机对口升学模拟答案.doc
  7. kafka php 安装配置,kafka安装及Kafka-PHP扩展的使用,kafkakafka-php扩展_PHP教程
  8. React学习笔记三 脚手架生成的index.js内容简介
  9. 百度深度学习初级工程师认证划水贴
  10. Node.js和io.js将合并到Node基金会下
  11. 词根词缀的实践应用 - 词根词缀词典墨墨详细使用
  12. js 监听浏览器刷新操作
  13. 企业终端无法获取到 IP地址
  14. 埃拉托色尼筛选法c语言求最大公约数,用埃拉托色尼筛算法求两个数最大公约数C++的实现...
  15. pythondjango教程_【秒懂】号称最为简明实用的Django上手教程
  16. 打印机的4种色彩输出方式
  17. MacBook Pro m1 homebrew 安装,卸载脚本
  18. 新手小白,做短视频自媒体创业,需要准备什么?
  19. 数据恢复实战技术总结
  20. UE4开发VR项目,帧率优化实践

热门文章

  1. python爬取评论_Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
  2. 【Java】什么是二方库?
  3. 英语语法:名词性从句讲解
  4. c#视频格式转换(.mov=>.mp4)
  5. 全球数字时间开关收入预计2028年达到16.471亿美元
  6. 职场新人如何成为沟通高手
  7. MDA:两种MDAer
  8. 中国电子学会和nct哪个证书好,适合报名哪一个呢?
  9. python抓取网站重要url_[Python]网络爬虫(一):抓取网页的含义和URL基本构成
  10. 敏捷 scrum_敏捷教练,Scrum大师,交付经理