vue自定义指令 v-copy一键复制

原文转载自添加链接描述

<template>
  <div>
    <div v-clickCopy>1234566666:  点我直接复制文本</div>
  </div>
</template>

<script>
export default {
  data() {
    return {

    }
  },
  directives: {
     
    clickCopy: {
        
      inserted(el, binding,vnode) {
        console.log(el, binding);
        el.addEventListener('click', () => handleClick(el.innerText))
        el.style.cursor = 'copy'

        function handleClick(text) {
          // 创建元素
          if (!document.getElementById('copyTarget')) {
            const copyTarget = document.createElement('input')
            copyTarget.setAttribute('style', 'position:fixed;top:0;left:0;opacity:0;z-index:-1000;')
            copyTarget.setAttribute('id', 'copyTarget')
            document.body.appendChild(copyTarget)
          }

          // 复制内容
          const input = document.getElementById('copyTarget')
          input.value = text
          input.select()
          document.execCommand('copy')

          /* vue 自定义指令内部没有this指向 可以传vnode.context解决  */
          const that = vnode.context
           that.$message.success('恭喜');
          setTimeout(() => {
              that.showSuccess()
          }, 500);
        }

      }
    }
  },
  methods: {
      showSuccess(){
          this.$message('恭喜复制成功');
      }
  }
}
</script>

<style>
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值