Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e76088d

Browse files
committed
refactor
1 parent 4d2d52e commit e76088d

File tree

3 files changed

+46
-23
lines changed

3 files changed

+46
-23
lines changed

src/utils/clipboard.js

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
11
import Vue from 'vue'
22
import Clipboard from 'clipboard'
33

4-
function clipboardSuccess() {
4+
const VueClipboardConfig = {
5+
autoSetContainer: false,
6+
appendToBody: true // This fixes IE, see #50
7+
}
8+
9+
function clipboardSuccess(successText) {
510
Vue.prototype.$message({
6-
message: 'Copy successfully',
11+
message: successText || 'Copy successfully',
712
type: 'success',
813
duration: 1500
914
})
1015
}
1116

12-
function clipboardError() {
17+
function clipboardError(errorText) {
1318
Vue.prototype.$message({
14-
message: 'Copy failed',
19+
message: errorText || 'Copy failed',
1520
type: 'error'
1621
})
1722
}
1823

19-
export default function handleClipboard(text, event) {
20-
const clipboard = new Clipboard(event.target, {
21-
text: () => text
22-
})
23-
clipboard.on('success', () => {
24-
clipboardSuccess()
25-
clipboard.destroy()
26-
})
27-
clipboard.on('error', () => {
28-
clipboardError()
29-
clipboard.destroy()
24+
export default function handleClipboard({ text, container, successText, errorText } = {}) {
25+
return new Promise(function(resolve, reject) {
26+
var fakeElement = document.createElement('button')
27+
var clipboard = new Clipboard(fakeElement, {
28+
text: function() { return text },
29+
action: function() { return 'copy' },
30+
container: typeof container === 'object' ? container : document.body
31+
})
32+
33+
clipboard.on('success', function(e) {
34+
clipboard.destroy()
35+
clipboardSuccess(successText)
36+
resolve(e)
37+
})
38+
clipboard.on('error', function(e) {
39+
clipboard.destroy()
40+
clipboardError(errorText)
41+
reject(e)
42+
})
43+
if (VueClipboardConfig.appendToBody) document.body.appendChild(fakeElement)
44+
fakeElement.click()
45+
if (VueClipboardConfig.appendToBody) document.body.removeChild(fakeElement)
3046
})
31-
clipboard.onClick(event)
3247
}

src/views/clipboard/index.vue

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
<template>
22
<div class="app-container">
3+
4+
<aside>
5+
<a target="_blank" href="https://panjiachen.github.io/vue-element-admin-site/feature/component/clipboard.html">Documentation</a>
6+
</aside>
7+
38
<el-tabs v-model="activeName">
49
<el-tab-pane label="use clipboard directly" name="directly">
510
<el-input v-model="inputData" placeholder="Please input" style="width:400px;max-width:100%;" />
6-
<el-button type="primary" icon="el-icon-document" @click="handleCopy(inputData,$event)">
11+
<el-button type="primary" icon="el-icon-document" @click="handleCopy(inputData)">
712
copy
813
</el-button>
914
</el-tab-pane>
@@ -33,8 +38,11 @@ export default {
3338
}
3439
},
3540
methods: {
36-
handleCopy(text, event) {
37-
clip(text, event)
41+
handleCopy(text) {
42+
// return a promise
43+
clip({ text: text }).then(() => {
44+
console.log('success')
45+
})
3846
},
3947
clipboardSuccess() {
4048
this.$message({

src/views/icons/index.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</aside>
77
<el-tabs type="border-card">
88
<el-tab-pane label="Icons">
9-
<div v-for="item of svgIcons" :key="item" @click="handleClipboard(generateIconCode(item),$event)">
9+
<div v-for="item of svgIcons" :key="item" @click="handleClipboard(generateIconCode(item))">
1010
<el-tooltip placement="top">
1111
<div slot="content">
1212
{{ generateIconCode(item) }}
@@ -19,7 +19,7 @@
1919
</div>
2020
</el-tab-pane>
2121
<el-tab-pane label="Element-UI Icons">
22-
<div v-for="item of elementIcons" :key="item" @click="handleClipboard(generateElementIconCode(item),$event)">
22+
<div v-for="item of elementIcons" :key="item" @click="handleClipboard(generateElementIconCode(item))">
2323
<el-tooltip placement="top">
2424
<div slot="content">
2525
{{ generateElementIconCode(item) }}
@@ -55,8 +55,8 @@ export default {
5555
generateElementIconCode(symbol) {
5656
return `<i class="el-icon-${symbol}" />`
5757
},
58-
handleClipboard(text, event) {
59-
clipboard(text, event)
58+
handleClipboard(text) {
59+
clipboard({ text: text })
6060
}
6161
}
6262
}

0 commit comments

Comments
 (0)