vue复制粘贴数据

应用场景:复制表格单行数据,到新页面粘贴
列表页面
页面效果
在这里插入图片描述
点击操作栏的“复制”,复制单行数据
代码

// 这里的id对应复制事件的id,默认样式不展示
<textarea id="rowData" style="display: none;"></textarea>

// 点击“复制”触发的事件
handleCopy(row){
      console.log(row);
      var ele = document.getElementById("rowData");
      ele.value = JSON.stringify(row)   // 用JSON.stringify转换一下
      ele.select();
      document.execCommand('copy');
      this.msgSuccess("复制成功");   // 封装好的提示方法,没封装可以用官网原本的提示 this.$message.success()
      sessionStorage.setItem('copyData',ele.value)  //将复制的数据缓存起来
      console.log(ele.value,':ele.value');
},

打印的复制数据
在这里插入图片描述
form页面
在这里插入图片描述
进入页面时,判断是否有缓存,有缓存则显示该弹窗,没有缓存不显示;点击“取消”或“确定”时,清空缓存
代码

<el-dialog
      title="提示"
      :visible.sync="showCopy"
      width="40%"
      :before-close="handleClose">
      <span>检测到有粘贴内容,是否粘贴到该订单?</span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="cancalCopy">取 消</el-button>
        <el-button type="primary" @click="sureCopy">确 定</el-button>
      </span>
</el-dialog>
data(){
	return{
		copyData:{},  // copy的数据
		showCopy:false, // 复制弹窗列表
	}
},
created() {
    this.copyData = JSON.parse(sessionStorage.getItem("copyData"));
    if (Object.keys(this.copyData).length>0) {  // 判断缓存是否有数据
      this.showCopy = true
    }else{
      this.showCopy = false
    }
},
methods:{
	cancalCopy(){
      this.showCopy = false
      sessionStorage.removeItem('copyData')  // 清除缓存
    },
    // 点击“确定”按钮,将剪贴板的内容粘贴到form表单,并清除缓存
    sureCopy(){
      //this.formInline:form表单默认数据
      this.formInline= {...this.copyData,...this.formInline} 
      this.showCopy = false
      sessionStorage.removeItem('copyData')
    },
}

以上就是所有过程啦!如果有更方便的方法欢迎补充哦~

### 如何在 Vue 中使用 Element Plus 实现复制粘贴功能 #### 一、实现复制功能 为了实现在 Vue 中通过 Element Plus 组件库完成复制功能,可以借助第三方插件 `clipboard` 来简化操作逻辑。以下是具体的实现方式: 1. **安装依赖** 需要引入 `clipboard` 插件来处理复制行为。 ```bash npm install clipboard --save ``` 2. **配置 main.js 文件** 在项目的入口文件中初始化 ClipboardJS 并挂载到全局对象上以便于后续调用[^1]。 ```javascript import { createApp } from 'vue'; import App from './App.vue'; import ElementPlus from 'element-plus'; import 'element-plus/dist/index.css'; // 初始化 Clipboard import ClipboardJS from 'clipboard'; const app = createApp(App); app.use(ElementPlus); new ClipboardJS('.copy-btn'); // 将按钮绑定至 Clipboard 功能 app.mount('#app'); ``` 3. **模板部分 (App.vue)** 页面结构如下所示,在每个链接旁边放置一个用于触发复制事件的按钮,并设置好对应的属性以供 Clipboard 正确识别目标元素[^3]。 ```html <template> <div class="content"> <div class="item" v-for="(item, key) in linkList" :key="key"> <div class="link"> <a :href="item" target="_blank">{{ item }}</a> </div> <div class="copy"> <!-- 设置 data-clipboard-target 属性指向实际需要被复制的内容 --> <el-button type="text" class="copy-btn" data-clipboard-text="{{ item }}" @click="handleCopySuccess" > 复制 </el-button> </div> </div> </div> </template> <script> export default { name: "App", data() { return { linkList: ["https://example.com", "http://another-example.org"], }; }, methods: { handleCopySuccess(event) { this.$message.success('已成功复制到剪切板!'); } } }; </script> ``` #### 二、实现粘贴功能 对于粘贴功能而言,如果希望支持用户直接从剪切板粘贴图片并上传,则可以通过监听输入框或者富文本编辑器中的 paste 事件捕获用户的动作数据流[^2]。 下面是一个简单的例子演示如何创建这样的组件: ```html <template> <div> <h4>粘贴图片上传</h4> <input ref="fileInput" style="display:none;" type="file"/> <textarea placeholder="在这里尝试粘贴..." @paste="onPaste"></textarea> <ul> <li v-for="(image, index) in images" :key="index"> <img :src="image.src" alt="" /> </li> </ul> </div> </template> <script> export default { data(){ return{ images:[] } }, methods:{ onPaste(e){ let items = e.clipboardData && e.clipboardData.items; Array.from(items).forEach((item)=>{ if(item.type.indexOf("image") !== -1 ){ var blob = item.getAsFile(); // 可在此处执行上传或其他操作... let reader = new FileReader(); reader.onloadend=(e)=>this.images.push({ src:e.target.result }); reader.readAsDataURL(blob); console.log(`Pasted image file`,blob); } }) } } } </script> ``` 上述代码片段展示了当用户向指定区域粘贴时自动检测是否有图像存在,并将其转成 base64 编码形式显示出来作为预览效果的一部分。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值