初识 vxe-table (一)

对于 vxe-table 的介绍这里就不说了,常规用法也不多累赘,应该按文档撸就可以了。这里主要讲下关于自定义渲染的一些方式

1、先看看部分自定义的效果

在这里插入图片描述
熟悉 Element 的朋友可能已经发现了,这个表格里面用了相关组件,比如:
tooltip — 实现了hover气泡
el-link — 渲染了表格内容
el-dropdown — 实现下拉菜单
最后还有一个空数据的渲染 el-empty,同时细心的朋友可能也发现了,排序那里也是自定义的图标。

小总结:
我们知道了,表头的内容单元格的内容、部分图标都可以自定义实现,进而完成我们的需求。

2、如何实现上述需求?

通过查阅文档,我们发现要是实现自定义渲染有两种方式:
1、插槽 就跟 vue 中插槽一个意思
2、渲染器 好比是注册了一个 vxe-table 的组件

插槽的方式这里不讲,应该来说都能理解到,主要示范下 渲染器 的方式 。(我推荐先大致浏览下 文档,我个人比较倾向于看 API 那栏,就可以看到自己使用的组件有哪些props和其他需要的)

3、先搞定一个简单的吧 — 实现一个空内容渲染器

声明:本人采用的 vxe-grid 组件
老规矩,看文档
在这里插入图片描述
可以看到,可以通过 empty-text 直接传递,也可以通过渲染器,那我们肯定是通过渲染器来搞撒(vxe 属性中带-render的通常是渲染器)

渲染器文档
在这里插入图片描述
那么,先照抄

// 这样就算注册了一个渲染器 name 为 NotData
VXETable.renderer.add('NotData', {// 空内容模板 这个函数是 vxe 固定的,渲染表格头部为 renderHeader,其他科看文档renderEmpty () {// 渲染器接收的返回值类型为 []vnode 因此,这样返回return [<el-empty description="暂时没有数据"></el-empty>]}
})// 使用 直接通过 props 传入
data() {return {gridOptions: {...emptyRender: {name: 'NotData'}}}
}

可以发现,其实这就跟注册组件一样,有人可能问,那我怎么传递参数或者绑定时间呢?下面以渲染一个单元格为例

4、渲染单元格

还是老规矩,先看文档
在这里插入图片描述
上面渲染空内容我们大概知道渲染器大致格式,xxx.add(name,option),要求我们提供一个 name ,这个name就是 prop 中渲染器参数的name选项,同时 option 选项中内置了渲染函数(也就是上图的配置参数)

对于渲染器,vxe 其实已经给你定好了,比如你想渲染空内容,就得用 empty-render ,想渲染单元格的内容,就得用cell-render…对于这个建议好好理解下,不然估计会乱用

总的来说,就是你得先知道你想自定义渲染的地方是属于哪一种渲染器,然后再去看对应文档。比如现在我们是想渲染单元格,那么就得看 cell-render,每个 render 其实提供的函数也不太一样,所以最好是仔细看

// 简单再解释下 以cell-render为例
renderHeader ---- 你想自定义渲染那一列的表头内容
renderDefault --- 你想自定义渲染那一列单元格的内容,就好比我们现在想渲染操作那一列(更多操作),就得用这个去渲染单元格
...这些渲染函数都提供了三个参数
renderHeader (h, renderOpts, params: { column, columnIndex, columnIndex, $rowIndex, $table }) h --- 应该类似vue render 函数的 h(具体我们看)renderOpts --- 渲染的时候传递的参数(你想传递的数据、事件等,都通过这个参数去获取)params --- 从文档应该可以看出,大致就是些当前列的一些信息

换句话说,当我们通过自定义的方式去渲染了一个单元格,那我怎么给这个单元格传递参数绑定事件?事件响应时如何获取当前列的信息呢?答案就是通过这些render函数提供的参数来获取

5、来渲染下表格中操作那列

渲染器的编写:

VXETable.renderer.add('Operation', {// Default --- 默认的表格单元格内容renderDefault(_, renderOpts, params) {// 直接从 renderOpts 解构出我们传递的事件、参数、包括ele组件的一些自定义事件const { events,props: { option,command } } = renderOptsreturn [<div><span class="editor-box pointer" onClick={ ()=> events(params) } >编辑</span><span style="margin: 0 10px" > | </span><el-dropdown placement="bottom" oncommand={ (val) => { command(val,params.row) } } ><span class="el-dropdown-link pointer" >更多</span><el-dropdown-menu slot="dropdown">{option.map((item) => {return (<el-dropdown-item command={item.id} >{item.text}</el-dropdown-item>)})}</el-dropdown-menu></el-dropdown></div>]}
})

在 props 中 columns 属性里定义我们的渲染器

// data
columns = [ { field: 'operation', title: '操作', showOverflow: true ,fixed: 'right',width: 200,cellRender: {name: 'Operation',events: (e) => { this.onTabMoreEditor(e) },props: {option: [{id: 'a',text: '删除'},{id: 'b',text: '狮子头'},{id: 'c',text: '螺蛳粉'}],command: this.onTabCommand}}}]methods: {/** 更多-编辑 **/onTabMoreEditor({ row: { name } }) {console.log(name)},/** 更多 **/  onTabCommand(val,row) {switch (val) {case 'a':console.log('当前选择 删除')this.gridOptions1.data = this.gridOptions1.data.filter((item) => item.id != row.id)break;case 'b':console.log('当前选择 狮子头')break;case 'c':console.log('当前选择 螺蛳粉')break;default:break;}}}

如上所示,我们编写好了渲染器,需要传递的事件和绑定的参数都可以通过渲染器提供的 props和events选项传递到渲染器组件中,进而完成业务功能

6、vxe-table mixin 的用法

当我们需要写多个渲染器时,又懒得通过 VXETable.renderer.add 方式去挨个添加,于是有了 mixin 的用法,就跟vue全局注册组件一样

const renderMap = {// 这种方式应该不用多说吧MyLink: {renderDefault (h, renderOpts, params) {let { row, column } = paramslet { events } = renderOptsreturn [<el-link type="primary" onClick={ () => events(params) } >{row[column.property]}</el-link>]}}
}
// mixin 接收一个 map 结构
VXETable.renderer.mixin(renderMap)

7、个人小总结

渲染器

  • 用来自定义渲染表格内容,使用 renderer.add(name,option = {}) option 可以理解为像 vue 的组件选项
  • 通常有几个渲染的api
  • renderDefault — 单元格的显示内容
  • renderHeader — 表格表头的渲染器
  • 这些渲染的 api 大部分都是三个参数
  • h – 渲染函数(一般用不到)
  • renderOpts – 像cellRender时传递的prop、event等参数
  • params – 表格当前行、列数据等(xxindex等)
  • tips
  • 1、在编写时,应先考虑是属于哪种渲染器,单元格?内容?空数据?等
  • 2、渲染器函数返回值都是 []vnode 类型
  • 3、如果编写的渲染器不显示(甚至不执行且编写无误)时,考虑是否和 vxe 默认配置重叠了
  • 笔者在编写 SeqIcon 时就遇到了,始终渲染的是默认的序号,原因就是 columns 配置项中,我又写了 type=seq 因此就渲染了默认的序号
  • 渲染器和插槽区别
  • 其实两者自由度都高,相对来说渲染器更加符合组件的思想,性能要好些

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/56685.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

陈抟(tuán)《心相篇》

北冥有鱼,其名为鲲。鲲之大,不知其几千里也。化而为鸟,其名为鹏。鹏之背,不知其几千里也。怒而飞,若垂天之云。是鸟也,海运则将徙于南冥。南冥者,天池也。《齐谐》者,志怪者也,《谐》之言曰:“鹏之徙于南冥也,水击三千里,抟扶摇而上者九万里,去以六月息者也。”(…

使用midjourney搞出一套三国人物画像!

当下已进入如火如荼的全民AI时代&#xff0c;最近体验了下midjourney&#xff0c;使用它的以图生图功能生成出来一套三国人物画像&#xff0c;和大家分享下使用心得。 使用midjourney的准备工作 下载工具 使用midjourney生产图片依赖的工具和流程&#xff0c;大致如下&#x…

玩转注册表

很多人都认识注册表&#xff0c;但是几乎没人搞懂过注册表。我来带大家玩转注册表&#xff0c;做这篇文章就想记录一下注册表里的一些路径&#xff08;难找&#xff0c;记不住&#xff01;&#xff09;&#xff0c;本文中我会介绍一些实用的利用注册表进行内网权限维持的一个思…

阿房宫赋

阿房宫赋 杜牧 六王毕&#xff0c;四海一。蜀山兀&#xff0c;阿房出。覆压三百余里&#xff0c;隔离天日。骊&#xff08;L&#xff09;山北构而西折&#xff0c;直走咸阳。二川溶溶&#xff0c;流入宫墙。五步一楼&#xff0c;十步一阁&#xff1b;廊腰缦回&#xff0c;檐…

女程序员一定不要找太帅的男生做你男朋友

女程序员一定不要找太帅的男生做你男朋友 帅哥每天弄头发 买鞋子买衣服买手表不思进取 帅哥天生就有种神一般的自信 女生都绕着他转 他们不懂呵护女朋友 还容易弄丢 所以 女程序员找男朋友 只要 穿着得体 干净利索就好 帅哥 还是都留给我吧

现在的程序员真的都找不到女朋友了??!!!

前言&#xff1a;小编这有自学的过程中有一些资源可以免费共享&#xff0c; 【内涵Java学习80g视频&#xff0c;大厂面试题库&#xff0c;Java学习书籍&#xff0c;或者技术指导】 加微信领取【备注007】 为什么现在程序员找女朋友会这么难呢&#xff1f; 让我们来看看现在…

当女朋友问你会不会出轨的时候,该怎么回答?

1 大象为什么会害怕体型小的动物&#xff1f; &#xff08;素材来源网络&#xff0c;侵删&#xff09; ▼ 2 学会说话很重要 &#xff08;素材来源网络&#xff0c;侵删&#xff09; ▼ 3 原来&#xff0c;他们的老爸是一串香肠&#xff1f; &#xff08;素材来源网络&…

程序员应该怎么和女生聊天,哪些话题屡试不爽?

首先我也也是程序员哈哈哈哈。。。。。。。 代码就像这样。。。。。。 &#xff08;那么下面说说我们程序员应该注意哪些事情和妹子聊天&#xff09; 说了不知道会不会被骂。 如果外形处于及格分以下&#xff08;不是指普通&#xff0c;是指丑&#xff09;&#xff0c;做一下医…

机器学习复习(上)

严正声明&#xff1a;本文的答案是ChatGPT的回答&#xff0c;仅供参考&#xff0c;不代表就是正确答案&#xff01;&#xff01;&#xff01; 2023年&#xff1a; 1.解释什么是过拟合和欠拟合&#xff0c;如何降低过拟合? 过拟合&#xff08;overfitting&#xff09;指的是一…

WhatsApp是什么?国内手机怎么安装怎么注册?

你做外贸吗&#xff1f;必备的几个国际社媒安装好了吗&#xff1f;成功注册并使用了嘛&#xff1f; 如果你是外贸新人&#xff0c;刚刚接触外贸完全不知道通过哪些途径与客户联系&#xff0c;那WhatsApp绝对是必不可少的一个工具。如果你是老外贸人&#xff0c;更不能忽视掉Wh…

基于android的即时通讯APP 聊天APP

基于android的即时通讯APP 或者 聊天APP 一 项目概述 该项目是基于Android 的聊天APP系统&#xff0c;该APP包含前台&#xff0c;后台管理系统&#xff0c;前台包含用户通讯录,用户详情&#xff0c;用户聊天服务&#xff0c;用户二维码,发现功能,发现详情 , 个人中心, 个人信…

Android 第三方APP直接跳转WhatsApp 和指定联系人(可以非好友)聊天

业务需求中有点击按钮&#xff0c;从我们APP跳转到WhatsApp和某个人聊天&#xff0c;发现前端实现是 https://api.whatsapp.com/send?phonexxxxx 把该链接通过Android系统浏览器打开&#xff0c;如果手机安装WhatsApp会直接打开app并跳转到对应的账号下&#xff0c;说明 What…

2022年城市商品房销售价格趋势,房价是涨还是跌?

近年来随着国家政策对房地产进行调控&#xff0c;房价是涨还是跌&#xff0c;是很多人关注和关心的问题。下面是小编对国家统计局最新发布的报告进行报表数据处理分析后得到的数据可视化图表&#xff0c;展示了2022年上半年以来商品房的发展情况&#xff0c;大家来看下吧。 一&…

chatgpt赋能python:Python抽奖概率:了解随机性及如何提高中奖概率

Python抽奖概率&#xff1a;了解随机性及如何提高中奖概率 在现代社会&#xff0c;抽奖活动越来越受欢迎。无论是商家推销产品还是赢得大奖&#xff0c;抽奖都是吸引人们参与的有效方式。其中&#xff0c;Python作为一种能够生成随机数的编程语言&#xff0c;成为了抽奖活动中…

又有大厂员工连续加班倒下/ 百度搜狗取消快照/ 马斯克生父不为他骄傲...今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是8月的第2天&#xff0c;友友们注意防暑降温哦&#xff01; 日报君在此为您呈上科技圈值得关注的新鲜事~ 今日新闻 浪潮员工连续值班24小时致昏迷&#xff0c;被诊断为“呼吸性碱中毒” 据Tech星球消息&#…

说好的不加班呢?百度工作强度已经超过字节了啊

有个新入职的百度员工怀疑自己进了假百度&#xff0c;因为他天天加班到半夜&#xff0c;和外面传说的“百度不加班”根本不一样&#xff0c;才干了两个礼拜&#xff0c;他已经开始怀疑人生了。 网友们乐了&#xff0c;小伙子挺有想象力&#xff0c;可惜现实很残酷&#xff0c;这…

BAT大揭秘:在腾讯、百度、阿里上班,差别竟然这么大?

微信又改版了&#xff0c;为了方便第一时间看到我们的推送&#xff0c;请按照下列操作&#xff0c;设置“置顶”&#xff1a;点击上方蓝色字体“程序员之家”-点击右上角“…”-点击“设为星标”。 可以啦&#xff0c;让我们继续相互陪伴。 谈到中国互联网&#xff0c;就绕不开…

2022这一年

前言 一年过得好快啊&#xff0c;这个年终总结不知道该写点啥&#xff0c;所以一直到现在也没动笔。 但如果不写吧&#xff0c;总感觉少了点什么。就像过年守夜&#xff0c;反正我是每年都要等到凌晨12点放完鞭炮后才睡。 前些天也看到不少博主发布了2022年终总结&#xff0c;…

Selenium 测试框架批量注册

Selenium 测试框架 先打开cmd下载Selenium : pip install -i https://pypi.douban.com/simple selenium如果是用cmd 下载的&#xff1a;pip show selenium使用该命令是否下载成功 或者直接在pycham IDE 在项目头上引入这个架包&#xff1a;from selenium import webdriver …

黑帽子Python——基础的网络编程工具——TCP的客户端和服务端

学习自Python黑帽子&#xff08;第二版&#xff09; TCP的客户端和服务端 前言TCP客户端TCP服务端问题后记 前言 直接通过实践学习编程&#xff0c;很容易产生一些细节方面的知识错误&#xff0c;遇到不会的俺就问ChatGPT&#x1f60f; TCP客户端 #快速创建一个TCP客户端对于…