以前、clipboard.jsの使い方の記事を書いたんですが、Vue.jsの v-model
が対象の場合はちょっとやりかたが違ったのでメモ
[JavaScript] ”クリップボードにコピー” ボタンを実装する(clipboard.jsの使い方) - Qiita
※ちなみに、vue-clipboard
というのも検索すると出てきますが、こちらは Vue.js 1.x でしか動作しません
使用例
clipboard.jsは基本的にコピー対象のフォームのidを指定しますが、Vue.jsのv-modelで指定している場合は思ったように動作しません。
かわりに :data-clipboard-text
で、Vueの対象dataの名前を指定してやればいいです。
index.html
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.6.0/clipboard.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.6/vue.min.js"></script>
<div id="app">
<input v-model="inputText" type="text">
<button class="btn" :data-clipboard-text="inputText">Copy</button>
<textarea v-model="textareaText"></textarea>
<button class="btn" :data-clipboard-text="textareaText">Copy</button>
</div>
<script>
(function() {
'use strict';
var clipboard = new Clipboard('.btn');
clipboard.on('success', function(e) {
console.info('Action:', e.action);
console.info('Text:', e.text);
console.info('Trigger:', e.trigger);
e.clearSelection();
});
clipboard.on('error', function(e) {
console.error('Action:', e.action);
console.error('Trigger:', e.trigger);
});
var app = new Vue({
el: "#app",
data: {
inputText: "クリップボードコピーテスト(input)",
textareaText: "クリップボードコピーテスト(textarea)"
}
});
})();
</script>
参考
clipboard.js — Copy to clipboard without Flash
フォーム入力バインディング - Vue.js