最近项目要求实现一个在表格里复制粘贴的功能,陆续越到了几个问题,跟小伙伴们分享下。
需求如下:点击表格某一列(如id)是获取该单元格内容,绑定到系统粘贴板,提示复制成功;
拿到需求之后兴冲冲的开始尝试。
第一步:使用vue 饿了么组件库提供的行点击钩子拿到row;
第二部:根据row的label属性获取判断当前点中的是那一个单元格;
第三步:通过window.clipboardData.setDada的方法去绑定到粘贴板;
然后问题来了,
VM34:1 Uncaught TypeError: Cannot read property 'setDada' of undefined
额,怎么回事,书上不是这么说的,百度吧,得到结果浏览器不支持了。怎么办,没法子了只能用input框去实现复制粘贴功能了;
流程如下:
第一步:在id列嵌套input;
第一步:使用vue 饿了么组件库提供的行点击钩子拿到row;
第二部:根据row的label属性获取判断当前点中的是那一个单元格,获取input框内容;
第三步:通过select();document.execCommand("copy"); //执行浏览器复制命令;
第四步:完事了,弹框通知下;
代码如下:
if (row.label === "id") { // 判断选中单元格
if (event.target.className === "el-input__inner") {
event.target.select();
document.execCommand("copy"); // 执行浏览器复制命令
this.$message.success("BOM码复制成功");
}
return;
}
完事了,检查下,没毛病,交给测试了;
新的问题又来了;
测试说:长度过长时没法换行。
额,我的错,考虑不周了;换成textarea吧,试了下,可以了;完美换行;但是
怎么办?痛苦的调样式
display: table-cell;
vertical-align: middle;
//无效
display: flex;
align-items: center;
justify-content: center;
//还是无效
唯一有效的:
height:25px;
line-height:25px;
但是不换行了,怎么办,手动判断了,代码如下:
:class="[scope.row.saleUnitCode.length>17?'el-input1':'el-input2']"
.el-input1{
height: 46px;
}
.el-input2{
height: 23px;
}