vue2一键复制之vue-clipboard2的使用

前言

最近在项目中,用到了一键复制的功能,类似于掘金的【复制代码】功能(具体看下图),现记录一下实现方式
在这里插入图片描述

项目技术环境

## 插件介绍

**vue-clipboard2:前端可以调用剪切板的一个插件,也除了适配vue3版本的(vue-clipboard3)

插件安装

yarn add vue-clipboard2

// or
npm install vue-clipboard2

可以在package.json中看看安装版本
在这里插入图片描述

使用方法

  1. main.js中注册
import VueClipBoard from 'vue-clipboard2'

// 使用VueClipBoard插件,主要功能:类似于剪切板
Vue.use(VueClipBoard)
  1. 定义自定义指令v-copy

一般项目中有个directive.js,存储项目全局的自定义指令

// 全局copy指令
const copy = {
  bind(el, { value }) {
    el.$value = value
    el.handler = () => {
      Vue.prototype.$copyText(`${el.$value}`).then(
        () => {
          Vue.prototype.$notify.info('success', '复制成功!')
        },
        () => {},
      )
    }
    el.addEventListener('click', el.handler) // 绑定点击事件
  },

  // 当传进来的值更新的时候触发
  componentUpdated(el, { value }) {
    el.$value = value
  },

  // 指令与元素解绑的时候,移除事件绑定
  unbind(el) {
    el.removeEventListener('click', el.handler)
  },
}
  1. main.js中注册自定义指令(directive.js
import * as directives from './util/directive'

// 注册全局指令
Object.keys(directives).forEach(key => {
  Vue.directive(key, directives[key]) // 插入指令名和对应方法
})
  1. 在需要实现的标签中使用v-copy指令
<div  @click.stop>
  <v-btn
    v-copy="item.id"
    v-show-tips="'复制'"
    icon
  >
    <v-icon size="1rem">
      mdi-content-copy
    </v-icon>
  </v-btn>
</div>

踩坑记录

v-dialog使用时,v-copy虽然提示复制成功,但是无法粘贴

**原因:**由于对话框的聚焦问题,在v-dialog上加上:retain-focus="false"

原文链接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TbosZjv1-1679660185835)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9b22699e-982e-4be8-a3b5-b5ebde92ba30/Untitled.png)]

vue-clipboard3使用

实现基于vue3环境的复制功能,以下是从npm(vue-clipboard3)官网示例借鉴的,未经实践

安装

yarn add vue-clipboard3

// or
npm install --save vue-clipboard3

使用方法

<template lang="html">
  <button @click="copy">Copy!</button>
</template>

<script lang="ts">
import { defineComponent } from '@vue/composition-api'
import useClipboard from 'vue-clipboard3'

export default defineComponent({
  setup() {
    const { toClipboard } = useClipboard()

    const copy = async () => {
      try {
        await toClipboard('复制成功')
      } catch (e) {
        console.error(e)
      }
    }

    return { copy }
  }
})
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值