使用Clipboard复制文本(Vue)

  • 使用Clipboard复制的文本有两类情况:复制的文本分为无格式文本和带格式文本;
  • 复制方式有两类情况:通过属性复制和通过节点复制

1、复制无格式文本

  1. 通过属性复制:
    1)先将文本和复制按钮通过id关联;
    2)点击按钮时,调用Clipboard()实例复制文本;
  2. 通过target指定要复印的节点。
<a-form-model-item
  label="会议密码"
  v-if="scheduleMeetingForm.password.trim().length != 0"
>
  <span id="password">{{ scheduleMeetingForm.password }}</span>
  <a-button
    type="link"
    data-clipboard-target="#password"
    data-clipboard-action="copy"
    @click="copy"
    class="copy-btn"
  >
    <a-icon type="copy" />
  </a-button>
</a-form-model-item>
// 法1:通过属性绑定
let copyBtn = new Clipboard(".copy-btn");
// 法2:通过target指定要复印的节点
/* let copyBtn = new Clipboard(".copy-btn", {
  target: function () {
    return document.getElementById('password');
  }
}); */
copyBtn.on("success", () => {
  this.$message.success(this.$t("message.copy_success"));
  copyBtn.destroy();
});
copyBtn.on("error", () => {
  this.$message.error(this.$t("message.copy_error"));
  copyBtn.destroy();
});

2、复制带格式文本

带格式文本相对无格式文本比较复杂,两种情况如下:

<!-- 邀请信息 -->
<div style="display: none" id="invitationInfo">
<!-- 法1:通过 属性data-clipboard-text绑定invitationInfo变量  -->
<pre>

{{$store.state.account.nickName == null ? "主持人" : $store.state.account.nickName}} 邀请您参加预先安排的会议

主题:{{ scheduleMeetingForm.meetingTitle }}
会议时间:{{ invitation_time }}

加入eMeet会议
{{ invitation_link }}

会议号:{{ scheduleMeetingForm.meetingId }}
密码:{{ scheduleMeetingForm.password }}

</pre>
</div>
copyInvitationInfo () {
  // 法1:通过属性,这种方式div中的文本不能使用HTML元素,要用pre标签保留源格式
  this.invitationInfo = document.getElementById('invitationInfo').innerText
  let copyBtn = new Clipboard(".copyInvitationInfo-btn")
  // 法2:通过target指定要复印的节点,这种方式不能将放置文本的div元素隐藏
  /* let copyBtn = new Clipboard(".copyInvitationInfo-btn", {
    target: function () {
      return document.getElementById('invitationInfo');
    }
  }); */
  copyBtn.on("success", () => {
    this.$message.success(this.$t("message.copy_success"));
    copyBtn.destroy();
  });
  copyBtn.on("error", () => {
    this.$message.error(this.$t("message.copy_error"));
    copyBtn.destroy();
  });
},

要注意的是:
1、上述要复制的文本都是提前准备好的,即“同步复制”,如果在new Clipboard()实例之前,文本没有准备好,则无法成功复制(并没有调用success回调,却也没有调用error回调);
2、如果要复制的文本需要隐藏,就只能用方式一,而要复制的文本如果不仅包括空格和换行,还需要其他的HTML格式,就只能使用方式二

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue-clipboard2是一个Vue.js插件,用于实现在Vue项目中复制文本内容或图片的功能。你可以通过安装和配置vue-clipboard2来使用它。 首先,你需要在你的项目中安装vue-clipboard2插件。可以使用npm或yarn命令来安装: ``` npm install vue-clipboard2 ``` 或 ``` yarn add vue-clipboard2 ``` 然后,在项目的main.js文件中引入vue-clipboard2插件,并配置autoSetContainer为true,以便自动设置复制容器: ``` import VueClipboard from 'vue-clipboard2' VueClipboard.config.autoSetContainer = true Vue.use(VueClipboard) ``` 接下来,你可以在你的Vue组件中使用v-clipboard指令来实现复制功能。例如,当点击一个div时复制相应的内容,可以按照以下方式编写代码: ```html <template> <div v-clipboard:copy="code" v-clipboard:success="onCopy" v-clipboard:error="onCopyError">点击复制</div> </template> ``` ```javascript data: function() { return { code: '我是复制的内容' } }, methods: { onCopy: function(e) { alert('复制内容 ' + e.text + '成功!'); }, onCopyError: function() { alert('您的手机系统不支持自动复制,请手动复制!'); } } ``` 这样,当点击该div时,相应的内容将被复制到剪贴板中,并触发相应的成功或失败回调函数。 如果你想复制图片,可以将img标签包装在一个div中,并在div上添加v-clipboard指令。例如: ```html <div v-clipboard:copy="code" v-clipboard:success="onCopy" v-clipboard:error="onCopyError"> <img src="xxxx" alt=" " /> </div> ``` 这样,当点击该div时,图片将被复制到剪贴板中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值