純粋なフロントエンド要件の場合は、[コピー]ボタンをクリックして、入力ボックスまたは指定したテキストをペーストボードにコピーします。Vueには、この機能を実現するための特別なプラグインがあります:vue-clipboard2、クリップボード
1、view-clipboard2
インストール:
npm install --save vue-clipboard2
main.jsで導入:
import VueClipboard from 'vue-clipboard2'
Vue.use(VueClipboard)
ページの使用法:
<template>
<div class="container">
<div id="target">
<p v-for="item in list">{
{
item}}</p>
</div>
<button type="button" @click="copy">复制</button>
</div>
</template>
<script>
export default {
data() {
return {
list:['这是一个循环出来的数据','可以通过div标签拿到渲染后的数据','然后实现list数组渲染后的数据复制']
}
},
methods: {
copy() {
let text = document.getElementById('target').innerText;
this.$copyText(text).then((e) => {
console.log('复制成功');
}, (e) => {
console.log('复制成功');
})
}
}
}
</script>
2、クリップボード
インストール:
npm install clipboard --save
main.jsで導入:
import clipboard from 'clipboard';
Vue.prototype.clipboard = clipboard;
ページでの使用:
<template>
<div class="container">
<div id="target">
<p v-for="item in list">{
{
item}}</p>
</div>
<button class="btn" type="button" data-clipboard-target="#target" @click="copy">复制</button>
</div>
</template>
<script>
export default {
data() {
return {
list:['这是一个循环出来的数据','可以通过div标签拿到渲染后的数据','然后实现list数组渲染后的数据复制']
}
},
methods: {
copy() {
let clipboard = new this.clipboard(".btn");
clipboard.on('success', function () {
console.log("复制成功")
});
clipboard.on('error', function () {
console.log("复制失败")
});
}
}
}
</script>
data-clipboard-target属性の値は、コピーされた要素のセレクターを指定します
。data-clipboard-action属性は、コンテンツをコピーするかカットするかを指定します。デフォルトはコピーです。
また、カットアクションのみを設定する場合は注意してください。or要素で動作します。
単一ページのアプリケーションはclipboard.destroy()メソッドを使用して、作成されたイベントとオブジェクトを破棄できます
。別の要素からコンテンツをコピーする必要がない場合。data-clipboard-text属性をターゲット要素に設定するだけで済みます。data-clipboard-text属性値は、設定した固定コンテンツです。
3.ネイティブメソッド
ネイティブメソッドもコピーできますが、互換性はあまり良くなく、一部のブラウザはそれをサポートしていません。これは主に、入力ボックスを動的に作成し、コピーするコンテンツを入力ボックスに入れてから、手動で選択を制御し、ブラウザのcopyメソッドを呼び出すことによって行われます。
<template>
<div class="container">
<div id="target">
<p v-for="item in list">{
{
item}}</p>
</div>
<button type="button" @click="copyText">复制</button>
</div>
</template>
<script>
export default {
data() {
return {
list:['这是一个循环出来的数据','可以通过div标签拿到渲染后的数据','然后实现list数组渲染后的数据复制']
}
},
methods: {
copyText() {
let text = document.getElementById('target').innerText;
let inputElement = document.createElement('input')
inputElement.value = text;
document.body.appendChild(inputElement);
inputElement .select(); //选中文本
document.execCommand("copy"); //执行浏览器复制命令
inputElement.remove();
console.log("复制成功")
}
}
}
</script>