需求:页面做了禁止复制,要求鼠标移动到部分内容上可以出现快捷复制的按钮。
为该列添加一个插槽,在这一列的columns写,
scopedSlots: { customRender: 'sparePartsNum' },
sparePartsNum为插槽名。
<template slot="sparePartsNum" slot-scope="text">
<a-popover :getPopupContainer="getPopupContainer" placement="right">
<template slot="content">
<a-button @click="getText(text)">复制</a-button>
</template>
<div style="cursor: pointer;color: #1890ff;text-decoration: underline;">{{ text }}</div>
</a-popover>
</template>
还有一个输入框组件,写在a-table标签外面
<input id="copy_content" type="text" value="" style="position: absolute;top: 0;left: 0;opacity: 0;z-index: -10;"/>
对应的方法
getPopupContainer(triggerNode){
triggerNode.parentNode.parentNode.oncontextmenu = new Function("event.returnValue=false");
triggerNode.parentNode.parentNode.onselectstart = new Function("event.returnValue=false");
return document.getElementsByClassName('parts-data')[0];
},
parts-data是文件最外层的一个样式id
通过input小组件实现复制的函数
getText(event){
let inputElement = document.getElementById("copy_content");
//给input框赋值
inputElement.value = event;
//选中input框的内容
inputElement.select();
// 执行浏览器复制命令
document.execCommand("Copy");
//提示已复制
// alert("复制成功!");
},
把这些统统塞进去就可以实现了。
附上禁止复制代码
在需要禁止的标签里直接写
οncοntextmenu="return false" onselectstart="return false"
或者
直接在created里塞以下两句:
this.$nextTick(() => {
// 禁用右键
document.oncontextmenu = new Function("event.returnValue=false");
// 禁用选择
document.onselectstart = new Function("event.returnValue=false");
});