LoginSignup
14
15

More than 5 years have passed since last update.

[Vue.js][clipboard.js] Vue.jsとclipboard.jsを組み合わせて使用する

Last updated at Posted at 2017-04-01

以前、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

14
15
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15