ElementUI 模态弹出框复制链接失效问题
需求是这样的,页面上有一个复制链接的按钮,点击之后弹出模态框,上面有二维码和复制链接按钮。
点击复制链接会通过这个方法打开模态框
showCopyUrl(url) {
this.$modal.show({
component: CopyUrl, // 我自己写的复制链接组件
props: {
url,
},
});
},
复制链接模态框如下图所示。
如图所示,点击复制出链接按钮,我想把输入框里的url拷贝到粘贴板,我用的是Clipboard.js。
一开始我的代码是这么写的
html
<el-input id="shareUrl" v-model="url" v-show="true" readonly>{{url}}</el-input>
<el-button type="primary" id='copy-btn' data-clipboard-target="#shareUrl" @click="copyUrl($event)" class="btn">复制</el-button>
js
copyUrl(event) {
var clipboard = new Clipboard('#copy-btn');
clipboard.on('success', e => {
this.$message({
message: '复制成功',
type: 'success',
duration:'1000'
});
clipboard.destroy();
});
clipboard.on('error', e => {
this.$message({
message: '复制失败',
type: 'error',
duration:'1000'
});
clipboard.destroy();
})
},
无奈点击复制链接页面一点反应也没有,失败的回掉也没有执行,而我看之前别人是在el-dialog里面这么写是没有问题的。于是我搜了一下网上大神的回答说 模态框修改了焦点。 (我: ??)
后来经过疯狂的google,找到了一个靠谱的解决方案,代码如下
html
<el-input id="shareUrl" v-model="url" v-show="true" readonly>{{url}}</el-input>
<el-button type="primary" ref='copy' data-clipboard-target="#shareUrl" @click="copyUrl($event)" class="btn">复制</el-button>
js
copyUrl(event) {
// debugger
let copy=this.$refs.copy.$el // 这里直接取dom对象
let clipboard = new Clipboard(copy);
clipboard.on('success', e => {
this.$message({
message: '复制成功',
type: 'success',
duration:'1000'
});
clipboard.destroy();
});
clipboard.on('error', e => {
this.$message({
message: '复制失败',
type: 'error',
duration:'1000'
});
clipboard.destroy();
})
clipboard.onClick(event) // 最后执行一次onClick()方法
},