复制粘贴、textarea居中踩坑记

714 阅读2分钟

最近项目要求实现一个在表格里复制粘贴的功能,陆续越到了几个问题,跟小伙伴们分享下。

需求如下:点击表格某一列(如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吧,试了下,可以了;完美换行;但是

下边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;
}

可以了,但是判断很不严谨;下来在看,大佬可以指点下。