Ant Design Table 如何动态自定义?Ant Popover 遮挡?
项目场景:
基于electron + Vue + node.js + express + mysql + evanpatchouli-mysql + Ant-Design-Vue,编写一款属于自己的轻量级MySQL数据库界面工具。
问题列表
- 如何动态渲染高度自定义的Ant Design Table?
- Ant Design Table 表头固定,内部Popover意外遮挡
问题描述
问题1
作为一款数据库界面工具,需要动态地获得数据库和表的信息,因此要渲染的表结构经常在变。
Ant Design Vue的官方手册给出的示例里,全部采用:datasource绑定数据源,:columns绑定表结构,如果想自定义column的内容,就往标签内嵌插槽<template>
以下是官方的template模板
<a-table :data-source="data">
<a-table-column key="age" title="Age" data-index="age" />
<a-table-column key="address" title="Address" data-index="address" />
<a-table-column key="tags" title="Tags" data-index="tags">
<template #default="{ text: tags }">
<span>
<a-tag v-for="tag in tags" :key="tag" color="blue">{{ tag }}</a-tag>
</span>
</template>
</a-table-column>
<a-table-column key="action" title="Action">
<template #default="{ record }">
<span>
<a>Action 一 {{ record.firstName }}</a>
<a-divider type="vertical" />
<a>Delete</a>
</span>
</template>
</a-table-column>
</a-table>
我复制了这个模板用到我的表格中,并且自定义了一个悬浮触发的Popover,这就存在一个问题:模板里,<a-table>内写了自定义的<a-table-column>,表头是在column标签上绑定title,但title不支持像:title这样的动态绑定,只能绑定一个死的字符串。
写死的表头并不符合我动态渲染不同表格的需求,删掉写死的表头,则不会渲染表头;我尝试为<a-table>定义了columns,表头是有了,但我自己写<a-table-column>又会被默认样式覆盖,单纯的渲染了源数据。
原因分析:
无论有没有绑定:columns时,渲染规则是一定的。为此,我们需要弄清楚不同情况下参数的映射关系,才能正确的渲染我们想要的效果。
解决方案1:
按照上面那个模板改:
不绑定columns,手写ant-table-column,v-for绑定表结构对column进行列表渲染,并绑定:dataindex为字段名去拿到数据,内置两个插槽对应表头和内容,#title和#default
<a-table
:dataSource="users"
:pagination="{ pageSize: 9 }"
:scroll="{ x: 'max-content', y: clientHeight }"
>
<a-table-column
v-for="item in userStruct"
:key="item.Field"
:data-index="item.Field"
@resizeColumn="handleResizeColumn"
>
<template #title
><span
style="
background: var(--text-backcolor);
color: var(--most-backlolor);
"
>{{ item.Field }}</span
>
</template>
<template #default="{ text: content }">
<a-popover
id="ziduanInfo"
title="字段信息"
placement="right"
trigger="hover"
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode;
}
"
>
<template #content>
<p>类型: {{ item.Type }}</p>
<p>键型: {{ item.Key }}</p>
<p>非空: {{ item.Null }}</p>
<p>字符集: {{ item.Collation }}</p>
<p>默认值: {{ item.Default }}</p>
<p>权限: {{ item.Privileges }}</p>
<p>其他: {{ item.Extra }}</p>
<p>描述: {{ item.Comment }}</p>
</template>
<span class="table-cell-content">{{ content }}</span>
</a-popover>
</template>
</a-table-column>
</a-table>
解决方案2:
不用官方给的这个示例,换一种插槽的方式
不写ant-table-column,在ant-table上绑定columns
内置两个插槽对应表头和内容,#headerCell和#bodyCell
内容依旧是用v-for进行渲染
<a-table :dataSource="users" :columns="columns">
<template #headerCell="{ column }">
<template v-if="column.key === 'id'">
<span>
<smile-outlined />
<a-button>{{ column.key }}</a-button>
</span>
</template>
</template>
<template #bodyCell="{ column, record }">
<template v-for="(item, index) in userConstruct" :key="index">
<a>
<a-button>{{ record[index] }}</a-button>
</a>
</template>
</template>
</a-table>
问题2
我的应用做了响应式界面,当electron窗口高度减小时,ant-table可见高度也随之减小,为此我设置了它的:scroll,为其动态指定了一个监听窗口的变量作为高度(y)。
我使用问题一的方案一中的代码时,当我的数据只有寥寥几条或者窗口很扁的时候,鼠标悬浮字段浮现的popover被限制在表可见高度内,无法完全显示。
为了解决这个问题,我先尝试css穿透ant-table,设置overflow为visible,无效。又尝试将xss穿透popover,设置其z-index为更高值,无效。
原因分析
ant-popover在渲染时,默认是挂载到最大的父容器body上。在我复制下来的示例代码中,指定了其挂载的容器为出发事件所在的容器-即ant-table,由于ant-table被我设置了高度,popover若高度比表格更高,溢出部分只能滑动父容器(ant-table)查看。
解决方案
删除ant-popover标签内绑定的挂载容器传值,或者为其指定一个合适的挂载容器。
题外话
这是我第一次使用ant-design,感觉上手不是很快,还在学习中,如有讲的不对的地方还请见谅。
Ant Design Table 如何动态自定义?Ant Popover 遮挡?的更多相关文章
- ant design Table合并单元格合并单元格怎么用?
1.ant design table合并单元格怎么用?
- 2017.11.6 - ant design table等组件的使用,以及 chrome 中 network 的使用
一.今日主要任务 悉尼小程序后台管理开发: 景点管理页面: 获取已有数据列表,选取部分数据呈现在表格中,根据景点名称.分类过滤出对应的景点. 二.难点 1. 项目技术选取: ant design. ...
- ant design table column 设置width不生效解决方案
当td里的内容超出了width的范围时,会出现width不固定,也就是width不生效 解决方案: 设置scroll的width等于所有列宽之和(scroll={{x: 100%}})
- ant design table td 文字显示过长添加省略号、ant 文字过长时添加tootip提示
方法1: overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit ...
- ant design pro(二)布局
一.概述 参看地址:https://pro.ant.design/docs/layout-cn 其实在上述地址ant-design上已经有详细介绍,本文知识简述概要. 页面整体布局是一个产品最外层的框 ...
- Vue.js高效前端开发 • 【Ant Design of Vue框架基础】
全部章节 >>>> 文章目录 一.Ant Design of Vue框架 1.Ant Design介绍 2.Ant Design of Vue安装 3.Ant Design o ...
- 阿里开源项目之Ant Design Pro
本篇文章主要包含的内容有三个方面. 第一.Ant Design Pro简介; 第二.Ant Design Pro能做什么; 第三.初步使用; 我相信通过这三个方面的讲解能让你大概知道Ant Desig ...
- ant design pro (七)和服务端进行交互
一.概述 原文地址:https://pro.ant.design/docs/server-cn Ant Design Pro 是一套基于 React 技术栈的单页面应用,我们提供的是前端代码和本地模拟 ...
- ant design pro(一)安装、目录结构、项目加载启动【原始、以及idea开发】
一.概述 1.1.脚手架概念 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具.例如大多数的React项目都有src,public,webpack配置文件等等, ...
- React组件库Ant Design的安装与使用
一.什么是 Ant Design 1.Ant Design 提炼自企业级中后台产品的交互语言和视觉风格 2.Ant Design 使用 TypeScript 构建,提供完整的类型定义文件 二.Ant ...
随机推荐
- 齐博X1-栏目的调用5
本节继续说明栏目的调用父级.同级.子级三层的栏目调用 父级.同级.子级三层的栏目调用 fun('sort@family',$fid,'cms') 比如下面栏目10利用这个函数,就可以调用出 父级9 同 ...
- 题解 UVA10285 最长的滑雪路径 Longest Run on a Snowboard
Solution 双倍经验 就是记搜嘛. 搞一个二维数组记录一下当前的最长滑雪路径,其他和普通 dfs 没什么两样. 向 \(4\) 个方向搜索,如果高度符合就 \(+1\) . 多测要注意数组初始化 ...
- .NET性能系列文章二:Newtonsoft.Json vs. System.Text.Json
微软终于追上了? 图片来自 Glenn Carstens-Peters Unsplash 欢迎来到.NET性能系列的另一章.这个系列的特点是对.NET世界中许多不同的主题进行研究.基准和比较.正如标题 ...
- 支持向量机(SVM)公式整理
支持向量机可以分为三类: 线性可分的情况 ==> 硬间隔最大化 ==> 硬间隔SVM 近似线性可分的情况 ==> 软间隔最大化 ==> 线性支持向量机 线性不可分的情况 ==& ...
- VBA粗犷整理
PART1: 三.查找 1.从某一行向上/下找到第一个不为空的行 intRowPntEnd = ActiveSheet.Cells(intRowPntStart, intColPnt).End(xlD ...
- Go语言核心36讲28
我在前面用20多篇文章,为你详细地剖析了Go语言本身的一些东西,这包括了基础概念.重要语法.高级数据类型.特色语句.测试方案等等. 这些都是Go语言为我们提供的最核心的技术.我想,这已经足够让你对Go ...
- C温故补缺(五):main函数的参数
main()的参数 main()函数的参数,用于在外部执行时传入参数,类似windows的bat脚本或linux的sh脚本.在bat脚本中传入参数,用%接收.sh脚本的参数用$接收. c语言编译成可执 ...
- C温故补缺(一):数据类型和基本类型占位
数据类型 基本类型:就是算术类型,包括整型和实型 枚举类型:一组离散的整数 void类型:无可用值类型 派生类型:指针(*),数组([]),结构体(struct),共用体(union),函数(fun( ...
- 研究光度立体法阶段性小结和优化(可20ms获取4个2500*2000灰度图的Normal Map)。
这个东西是我接触的第一个非2D方面的算法,到目前为止其实也没有完全搞定,不过可能短时间内也无法突破.先把能搞定的搞定吧. 这个东西也有一大堆参考资料,不过呢,搜来搜去其实也就那些同样的东西,个人觉得就 ...
- 关于sublime text 3写一个插件
前言 我之前一直想写一个记录自己笔记的软件,可以给因为我都记录在桌面的便签上很乱,以至于便签上满满的全是字母,很难看,但是我有不想写图形化界面,所以最终我选择了写一个sublime 插件,功能就是记录 ...