问题:Clipboard.js复制通过接口获取到的数据,复制失败(在Clipboard.js的复制操作中,不能包含任何异步的操作,即便包含,复制的还是copyData之前的值。)
解决方法:
思路:页面新创建一个DOM节点,将获取到的赋值内容赋值给data-clipboard-text属性,页面渲染完成后,模拟点击复制。记得将新创建的节点在页面隐藏
代码:
html:
//复制链接按钮
<button
class="preview_goods preview_handle"
key="indexs"
@click="handleCopy(item,indexs)"
>
<img src="../assets/img/icon/preview_handle.png" alt="" />
<p class="button-preview">复制链接</p>
</button>
//模拟复制节点
<span class="copyU" ref="copy" :data-clipboard-text="url" @click="copy"></span>
js:
// 获取链接,并模拟点击
async handleCopy(goods, indexs){
const res = await this.$store.dispatch("getShortUrlByGoodsIdAndStaffPhone", {
goodsId: goods.goodsInfo.goodsId,
})
if (res.statusCode == 200) {
this.url = res.data
this.$nextTick(_=>{
this.$refs.copy.click()
})
}else{
Toast(res.alertMsg);
}
},
//复制方法
copy(evnet){
evnet.preventDefault()
let clipboard = new Clipboard('.copyU')
clipboard.on('success', e => {
Toast('复制成功')
// 释放内存
clipboard.destroy()
})
clipboard.on('error', e => {
// 不支持复制
Toast('该浏览器不支持自动复制')
// 释放内存
clipboard.destroy()
})
},