方式一:

1.安装clipboard:npm install clipboard

2.src/utils/clipboard.js

 import Vue from 'vue'
import Clipboard from 'clipboard' function clipboardSuccess() {
console.log('success')
Vue.prototype.$message({
message: 'Copy successfully',
type: 'success',
duration: 1500
})
} function clipboardError() {
console.log('error')
Vue.prototype.$message({
message: 'Copy failed',
type: 'error'
})
} export default function handleClipboard(text, event) {
const clipboard = new Clipboard(event.target, {
text: () => text
})
clipboard.on('success', () => {
clipboardSuccess()
clipboard.off('error')
clipboard.off('success')
clipboard.destroy()
})
clipboard.on('error', () => {
clipboardError()
clipboard.off('error')
clipboard.off('success')
clipboard.destroy()
})
clipboard.onClick(event)
}

3.vue代码

 <template>
<div class="app-container">
<el-tabs>
<el-tab-pane label="直接使用剪切板">
<div class="el-tab-pane" >
<el-input v-model="inputData" style='width:400px;'></el-input>
<el-button @click="handleCopy(inputData,$event)">复制</el-button>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import clip from '@/utils/clipboard'
export default {
name: "index",
data(){
return {
inputData:""
}
},
methods:{
handleCopy(text, event) {
clip(text, event)
console.log('clicp')
}
}
}
</script> <style scoped> </style> <el-tab-pane label="使用封装的剪切指令v-directive">
<div class="el-tab-pane" >
<el-input style='width:400px;'></el-input>
<el-button>复制</el-button>
</div>
</el-tab-pane>

方式二:src/directive/clipboard/clipboard.js

src/directive/clipboard/index.js

npm install clipboard --save

 //index.js
import Clipboard from './clipbloard' const install = function(Vue) {
Vue.directive('Clipboard', Clipboard)
} if (window.Vue) {
window.clipboard = Clipboard
Vue.use(install); // eslint-disable-line
} Clipboard.install = install
export default Clipboard
 //clipboard.js
// Inspired by https://github.com/Inndy/vue-clipboard2
const Clipboard = require('clipboard')
if (!Clipboard) {
throw new Error('you shold npm install `clipboard` --save at first ')
} export default {
bind(el, binding) {
if (binding.arg === 'success') {
el._v_clipboard_success = binding.value
} else if (binding.arg === 'error') {
el._v_clipboard_error = binding.value
} else {
const clipboard = new Clipboard(el, {
text() { return binding.value },
action() { return binding.arg === 'cut' ? 'cut' : 'copy' }
})
clipboard.on('success', e => {
const callback = el._v_clipboard_success
callback && callback(e) // eslint-disable-line
})
clipboard.on('error', e => {
const callback = el._v_clipboard_error
callback && callback(e) // eslint-disable-line
})
el._v_clipboard = clipboard
}
},
update(el, binding) {
if (binding.arg === 'success') {
el._v_clipboard_success = binding.value
} else if (binding.arg === 'error') {
el._v_clipboard_error = binding.value
} else {
el._v_clipboard.text = function() { return binding.value }
el._v_clipboard.action = function() { return binding.arg === 'cut' ? 'cut' : 'copy' }
}
},
unbind(el, binding) {
if (binding.arg === 'success') {
delete el._v_clipboard_success
} else if (binding.arg === 'error') {
delete el._v_clipboard_error
} else {
el._v_clipboard.destroy()
delete el._v_clipboard
}
}
}
 view/clipboard/index.vue
<template>
<div class="app-container">
<el-tabs>
<el-tab-pane label="直接使用剪切板">
<div class="el-tab-pane" >
<el-input v-model="inputData" style='width:400px;'></el-input>
<el-button @click="handleCopy(inputData,$event)">复制</el-button>
</div>
</el-tab-pane>
<el-tab-pane label="使用封装的剪切指令v-directive">
<div class="el-tab-pane" >
<el-input v-model="inputData" placeholder="Please input" style='width:400px;'></el-input>
<el-button type="primary" icon="document" v-clipboard:copy='inputData' v-clipboard:success='clipboardSuccess'>copy</el-button>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import clipboard from '@/directive/clipboard/index.js' // use clipboard by v-directive export default {
name: "index",
data(){
return {
inputData:""
}
},
directives: {
clipboard
},
methods:{
clipboardSuccess() {
this.$message({
message: 'Copy successfully',
type: 'success',
duration: 1500
})
}
}
}
</script> <style scoped> </style>

vue实现复制粘贴的两种形式的更多相关文章

  1. C++:一般情况下,设计函数的形参只需要两种形式

    C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const ...

  2. vue中使用echarts的两种方法

    在vue中使用echarts有两种方法一.第一种方法1.通过npm获取echarts npm install echarts --save 2.在vue项目中引入echarts 在 main.js 中 ...

  3. jquery插件的两种形式

    这里总结一下jquery插件的两种形式,一种是通过字面量的形式组织代码,另一种是通过构造函数的方式.下面就两种形式来分析俩个例子. 例子1: ;(function ($,window,document ...

  4. SQL 关于apply的两种形式cross apply 和 outer apply(转)

    转载链接:http://www.cnblogs.com/shuangnet/archive/2013/04/02/2995798.html apply有两种形式: cross apply 和 oute ...

  5. SQL 关于apply的两种形式cross apply 和 outer apply

    SQL 关于apply的两种形式cross apply 和 outer apply 例子: CREATE TABLE [dbo].[Customers]( ) COLLATE Chinese_PRC_ ...

  6. SQL关于apply的两种形式cross apply和outer apply(转载)

    SQL 关于apply的两种形式cross apply 和 outer apply   apply有两种形式: cross apply 和 outer apply   先看看语法:   <lef ...

  7. 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编

    在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编 ...

  8. Controller@实现Controller的两种形式

    实现Controller的两种形式 形式1:仅仅实现IController接口,自定义Controller对Request的实现.形式2:在实现IController接口以后,继承Controller ...

  9. 在sql中case子句的两种形式

    case子句,在select后面可以进行逻辑判断. 两种形式:判断相等.判断不等 一.判断相等的语法: case 列名 when ...  then ... when ...  then ... el ...

随机推荐

  1. 下载 jdk

    1.下载JDK: 首先我们需要下载java开发工具包JDK,下载地址如下: http://www.oracle.com/technetwork/java/javase/downloads/index. ...

  2. vue 虚拟dom

    https://segmentfault.com/a/1190000008291645 一个VNode的实例对象包含了以下属性 tag: 当前节点的标签名 data: 当前节点的数据对象 VNode可 ...

  3. iOS调试证书/公布证书制作

    当已经注冊过applied 开发人员账号后,而且进行付款了,那么接下来就是证书制作了 1.登录membercenter https://developer.apple.com/membercenter ...

  4. openerp 7.0接收陌生邮件名称显示乱码问题解决方法

      修改代码:addons\mail\mail_thread.py #858 line #msg_dict['email_from'] = decode(message.get('from')) ms ...

  5. mysql循环批量插入测试数据

    http://blog.51cto.com/tianxingzhe/1676097 DROP PROCEDURE test_insert ; DELIMITER $$ CREATE PROCEDURE ...

  6. CEF 各个版本适应的平台参考表

    This Wiki page provides information about CEF branches and instructions for downloading, building an ...

  7. te

    var option = {}; $(function() { /* var taskId = ${pd.taskId}; */ var taskId = "1470880530369&qu ...

  8. HDUOJ-----2824The Euler function

    The Euler function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. HDUOJ-----(1072)Nightmare(bfs)

    Nightmare Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  10. RabbitMQ消息队列(六):使用主题进行消息分发[转]

    在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity(严重级别)的log.但是,这也是它之所以叫做简单日志 ...