vue2实现复制,粘贴功能,使用vue-clipboard2插件

news2024/10/6 3:21:13

一、需求说明
在项目中 点击按钮 复制 某行文本是很常见的 应用场景,

在 Vue 项目中实现 复制功能 需要借助 vue-clipboard2 插件。

二、代码实现
1、安装 vue-clipboard2 依赖
( 出现错误的话,可以试试切换成淘宝镜像源

npm config set registry https://registry.npm.taobao.org )

npm install --save vue-clipboard2

2、在 main.js 文件中全局引入插件
示例代码如下:

import Vue from 'vue'
import VueClipBoard from 'vue-clipboard2'
 
Vue.use(VueClipBoard)
 
new Vue({
  render: h => h(App)
}).$mount('#app')

3、案例

在组件中有两种方法可以实现复制功能。

方法一 :

使用 vue-clipboard2 提供的 指令

直接将变量内容复制至剪切板,暂时没有找到处理数据后再复制的方式

<template>
  <div class="yeluosen">
    <input type="text" v-model="message">
    <el-button 
      icon="el-icon-share" 
      size="mini" 
      style="font-size: 16px;padding: 4px 8px;" 
      title="共享" 
      v-clipboard:copy="scope.row.url" 
      v-clipboard:success="onCopy" 
      v-clipboard:error="onError" 
      @click="share(scope.row.url)"></el-button>
  </div>
</template>

复制时,通过 v-clipboard: copy 复制输入的内容 :

// 复制成功 or 失败(提示信息!!!)
onCopy: function (e) {
  console.log('复制成功!', e)
},
onError: function (e) {
  console.log('复制失败!', e)
}

方法二:
使用 vue-clipboard2 全局绑定的 $copyText 事件方法

复制动作使用的是 Vue 响应函数方式,这就为复制前控制数据提供了可能!

// 点击事件
share(val) {
  this.handleData(val)
  this.$copyText(this.message).then(function (e) {
    alert('Copied')
  }, function (e) {
    alert('Can not copy')
  })
},
 
// 数据处理
handleData(val){
  this.message = this.message + ' ' + val
}

<template>
  <div>
    <el-button
      type="success"
      size="small"
      style="margin-left: 10px"
      @click="onCopy"
      >复制</el-button
    >
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      text: "这是一段复制的文本",
    };
  },
  methods: {
    onCopy() {
      this.$copyText(this.pathText).then(
          e=>{
            console.log('复制成功:', e);
          },
          e=>{
            console.log('复制失败:', e);
          }
      )
    }
  }
};
</script>

三、项目所用

实现选中并且复制成功后带有提示信息的效果 :

<template>
  <div>
    <el-input ref="addressInput" v-model="address" :readonly="true">
      <template slot="prepend"> 反馈地址 </template>
    </el-input>
    <el-button @click="copyLink(address)">复制链接</el-button>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      address: "https://www.baidu.com/", // 地址信息
    };
  },
  methods: {
    // 判断是否是 IE 浏览器
    isIE() {
      if (window.ActiveXObject || "ActiveXObject" in window) {
        return true;
      } else {
        return false;
      }
    },
    // 拷贝地址
    copyLink(url) {
      if (this.isIE()) {
        this.$copyText(url);
        this.$refs.addressInput.select(); // 实现选中效果
        this.$message.success("复制成功!");
      } else {
        this.$copyText(url)
          .then((res) => {
            this.$refs.addressInput.select(); // 实现选中效果
            this.$message.success("复制成功!");
          })
          .catch((err) => {
            this.$message.error("该浏览器不支持自动复制, 请手动复制");
          });
      }
    },
  },
};
</script>
 
<style lang="scss" scoped></style>

优化一下,我想要复制一个对象,需要做转义,像这样

<el-dialog title="提示" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
  
      <span slot="footer" class="dialog-footer">
        <span>{{ form.address }}</span>
        <span>{{ form.name }}</span>
        <span>{{ form.password }}</span>
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
        <el-button type="primary" @click="share(form)">复制</el-button>
      </span>
    </el-dialog>

data(){
return{
 form: {
        address: "https://www.baidu.com/", // 地址信息
        name: "张三",
        password: "123",
      },
}
}
 share(url) {
      if (this.isIE()) {

        this.$copyText(this.form.password);
        // this.$refs.addressInput.select(); // 实现选中效果
        this.$message.success("复制成功!");
      } else {
            //此处做转义,并且使用JSON.stringify转一下

        let obj = {
          '地址': this.form.address,
          '用户名': this.form.name,
          '密码': this.form.password
        }
        const objectString = JSON.stringify(obj);
        this.$copyText(objectString)
          .then((res) => {
            // this.$refs.addressInput.select(); // 实现选中效果
            this.$message.success("复制成功!");
          })
          .catch((err) => {
            this.$message.error("该浏览器不支持自动复制, 请手动复制");
          })
      }
    },

最终结果为{"地址":"https://www.baidu.com/","用户名":"张三","密码":"123"},,win+v剪贴板上也会存在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring的核心概念理解案列

IDEA开发的简单“登陆成功”小项目 IDEA项目结构&#xff1a; 每一部分代码和相应的解读&#xff1a; com.itTony文件下有dao&#xff08;实体&#xff09;层&#xff0c;service&#xff08;服务&#xff09;层&#xff0c;编写的2个类&#xff08;HelloSpring和TestSpring&…

ORA-12170: TNS:连接超时

今天在oracle数据库搭建连接远程数据库的dbink时&#xff0c;发现搭建失败报错&#xff1a;ORA-12170: TNS:连接超时 但是是能够ping的通远程数据库地址的。 telnet 172.18.6.104 1522要求查看下创建dblink语句&#xff0c;也确认创建语句无误。 (DESCRIPTION (ADDRESS_LIST…

使用labelme中的AI多边形(AI-polygon)标注 win版exe Create AI-Polygon闪退

这里写目录标题 虚拟环境创建labelme虚拟环境下载AI标注模型win Labelme.exe Create AI-Polygon闪退问题也用如下方法解决 win Labelme.exe Create AI-Polygon闪退问题也用如下方法解决愉快地使用labelme的AI标注工具 虚拟环境 创建labelme虚拟环境 创建基础环境并激活 cond…

顺序表的介绍

前言 大家好&#xff0c;作者菌又来了&#xff0c;今天我们开始顺序表的学习&#xff0c;今天的内容十分的简单&#xff0c;就是带领大家简单了解顺序表&#xff0c;那好话不多说&#xff0c;直接开始我们今天的正题&#xff01;&#xff01; 1.顺序表的概念和结构 线性表…

驾校管理系统的全面革新与升级

智慧驾校系统是一款专为现代驾校量身定制的综合性管理平台,它深度融合了云计算、大数据、物联网及人工智能等前沿技术,旨在为驾校打造一个高效、智能、便捷的运营生态系统。该系统通过数字化、信息化的手段,彻底革新了传统驾校的管理模式,不仅极大地提升了驾校的运营效率,…

智慧校园-基础平台功能总体概述

智慧校园基础平台是现代教育信息化的核心&#xff0c;它集成了系统管理、基础数据、系统监控、系统工具、流程管理等关键功能&#xff0c;构建了一个全面、智能、安全的校园生态系统。系统管理部分&#xff0c;通过权限管理和用户管理&#xff0c;实现了对用户访问权限的精细化…

【Qt】Qt开发环境搭建

目录 一. Qt SDK的下载&安装 二. Qt相关工具介绍 Qt的常用开发工具有&#xff1a; Qt CreatorVisual StudioEclipse 一. Qt SDK的下载&安装 Qt 下载官网&#xff1a; http://download.qt.io/archive/qt/ 国内清华源: https://mirrors.tuna.tsinghua.edu.cn/qt/arc…

freemarker生成pdf,同时pdf插入页脚,以及数据量大时批量处理

最近公司有个需求&#xff0c;就是想根据一个模板生成一个pdf文档&#xff0c;当即我就想到了freemarker这个远古老东西&#xff0c;毕竟freemarker在模板渲染方面还是非常有优势的。 准备依赖&#xff1a; <dependency><groupId>org.springframework.boot</gr…

【讲解下iOS语言基础】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【论文阅读】-- Visual Traffic Jam Analysis Based on Trajectory Data

基于轨迹数据的可视化交通拥堵分析 摘要1 引言2 相关工作2.1 交通事件检测2.2 交通可视化2.3 传播图可视化 3 概述3.1 设计要求3.2 输入数据说明3.3 交通拥堵数据模型3.4 工作流程 4 预处理4.1 路网处理4.2 GPS数据清理4.3 地图匹配4.4 道路速度计算4.5 交通拥堵检测4.6 传播图…

Halcon 产品周围缺口检测

*读取一张图像read_image (Image, 原图.jpg)*获取图像大小get_image_size(Image, Width, Height)*关闭已经打开的窗口dev_close_window ()*打开新窗口dev_open_window(0, 0, Width, Height, black, WindowHandle) //打开指定大小的窗口*对图像进行阈值操作threshold (Image, R…

C语言 指针和数组—指针数组及其在字符串处理中的应用

目录 问题的提出 问题的解决 回头看——指针、数组及其他类型的混合 指针数组与指向数组的指针 字符串的排序 问题的提出 问题的解决 回头看——指针、数组及其他类型的混合  基本数据类型  int 、 long 、 char 、 short 、 float 、 double……  数组是一种从…

001,函数指针是一种特殊的指针,它指向的是一个函数地址,可以存储函数并作为参数传递,也可以用于动态绑定和回调函数

函数指针是一种特殊的指针 001&#xff0c;函数指针是一种特殊的指针&#xff0c;它指向的是一个函数地址&#xff0c;可以存储函数并作为参数传递&#xff0c;也可以用于动态绑定和回调函数 文章目录 函数指针是一种特殊的指针前言总结 前言 这是ai回答的标准答案 下面我们…

SSM中小学生信息管理系统 -计算机毕业设计源码02677

摘要 随着社会的发展和教育的进步&#xff0c;中小学生信息管理系统成为学校管理的重要工具。本论文旨在基于SSM框架&#xff0c;采用Java编程语言和MySQL数据库&#xff0c;设计和开发一套高效、可靠的中小学生信息管理系统。中小学生信息管理系统以学生为中心&#xff0c;通过…

手把手搭建微信机器人,帮你雇一个24小时在线的个人 AI 助理(上)

上一篇&#xff0c;带领大家薅了一台腾讯云服务器&#xff1a;玩转云服务&#xff1a;手把手带你薅一台腾讯云服务器&#xff0c;公网 IP。 基于这台服务器&#xff0c;今天我们一起动手捏一个基于 LLM 的微信机器人。 0. 前置准备 除了自己常用的微信账号以外&#xff0c;还…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日聚会(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

【微服务】springboot对接Prometheus指标监控使用详解

目录 一、前言 二、微服务监控概述 2.1 微服务常用监控指标 2.2 微服务常用指标监控工具 2.3 微服务使用Prometheus监控优势 三、环境准备 3.1 部署Prometheus服务 3.2 部署Grafana 服务 3.3 提前搭建springboot工程 3.3.1 引入基础依赖 3.3.2 配置Actuator 端点 3.…

STM32实现看门狗(HAL库)

文章目录 一. 看门狗1. 独立看门狗&#xff08;IWDG&#xff09;1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗&#xff08;WWDG&#xff09;2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG&#xff0c;而导致芯片无法正常工…

如何对GD32 MCU进行加密?

GD32 MCU有哪些加密方法呢&#xff1f;大家在平时项目开发的过程中&#xff0c;最后都可能会面临如何对出厂产品的MCU代码进行加密&#xff0c;避免产品流向市场被别人读取复制。 下面为大家介绍GD32 MCU所支持的几种常用的加密方法&#xff1a; 首先GD32 MCU本身支持防硬开盖…

无需服务器,浏览器跑700+AI模型?!【送源码】

Transformers.js 是一个创新的网络机器学习库&#xff0c;它将先进的 Transformer 模型直接带入浏览器&#xff0c;无需服务器端支持。这个库与 Hugging Face 的 Python transformers 库功能对等&#xff0c;提供相似的 API 接口来运行预训练模型&#xff0c;涵盖了自然语言处理…