vue-clipboard2 vs vue-clipboard3
クリップボード操作
vue-clipboard2vue-clipboard3
クリップボード操作

クリップボード操作ライブラリは、ウェブアプリケーションがユーザーのクリップボードとインタラクションできるようにするツールです。これらのライブラリは、テキストをクリップボードにコピーしたり、クリップボードからテキストを貼り付けたりする機能を提供します。これにより、ユーザーは簡単にデータをコピー&ペーストできるようになり、フォームやアプリケーションの使い勝手が向上します。vue-clipboard2は、Vue.js 2.xおよび3.x向けのシンプルで軽量なクリップボード操作ライブラリで、コピーとペーストの機能を簡単に実装できます。一方、vue-clipboard3は、Vue 3専用に設計されたライブラリで、Composition APIを活用し、よりモダンで柔軟なインターフェースを提供します。

npmのダウンロードトレンド
3 年
GitHub Starsランキング
統計詳細
パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
vue-clipboard296,6971,766-374年前MIT
vue-clipboard343,99514312.5 kB12-MIT
機能比較: vue-clipboard2 vs vue-clipboard3

Vueバージョンサポート

  • vue-clipboard2:

    vue-clipboard2は、Vue 2.xおよび3.xの両方をサポートしており、レガシーなVue 2プロジェクトでも使用できます。これにより、古いプロジェクトに新しい機能を追加する際の互換性が保たれます。

  • vue-clipboard3:

    vue-clipboard3は、Vue 3専用に設計されており、Composition APIを活用しています。Vue 3の新機能を最大限に活用したいプロジェクトに最適です。

APIの設計

  • vue-clipboard2:

    vue-clipboard2は、シンプルで直感的なAPIを提供しており、迅速にクリップボード操作を実装できます。特に、v-clipboardディレクティブを使用することで、HTML要素に簡単にコピー機能を追加できます。

  • vue-clipboard3:

    vue-clipboard3は、Composition APIを活用したモダンなAPI設計が特徴です。useClipboardフックを使用することで、より柔軟で再利用可能なクリップボード操作が可能になります。

カスタマイズ性

  • vue-clipboard2:

    vue-clipboard2は、基本的なカスタマイズが可能ですが、特に高度なカスタマイズには限界があります。シンプルなクリップボード操作には十分ですが、複雑な要件には対応しきれない場合があります。

  • vue-clipboard3:

    vue-clipboard3は、Composition APIを活用することで、より高いカスタマイズ性を提供します。開発者は、クリップボード操作をより自由に拡張し、プロジェクトのニーズに合わせた実装が可能です。

依存関係

  • vue-clipboard2:

    vue-clipboard2は、外部依存関係が少なく、軽量なライブラリです。これにより、プロジェクトに追加する際の負担が少なく、パフォーマンスへの影響も最小限に抑えられます。

  • vue-clipboard3:

    vue-clipboard3も軽量ですが、Vue 3のComposition APIに依存しているため、Vue 3専用のプロジェクトでのみ使用できます。これにより、Vue 3の機能をフルに活用した実装が可能ですが、レガシーなプロジェクトには適していません。

コード例

  • vue-clipboard2:

    vue-clipboard2を使用したクリップボードコピーの例

    <template>
      <div>
        <input v-model="text" placeholder="コピーするテキスト" />
        <button v-clipboard:copy="text" v-clipboard:success="onSuccess">コピー</button>
      </div>
    </template>
    <script>
    export default {
      data() {
        return {
          text: 'こんにちは、世界!',
        };
      },
      methods: {
        onSuccess() {
          alert('テキストがクリップボードにコピーされました!');
        },
      },
    };
    </script>
    
  • vue-clipboard3:

    vue-clipboard3を使用したクリップボードコピーの例

    <template>
      <div>
        <input v-model="text" placeholder="コピーするテキスト" />
        <button @click="copy">コピー</button>
      </div>
    </template>
    <script>
    import { ref } from 'vue';
    import { useClipboard } from 'vue-clipboard3';
    
    export default {
      setup() {
        const text = ref('こんにちは、世界!');
        const { copy } = useClipboard();
    
        return { text, copy };
      },
    };
    </script>
    
選び方: vue-clipboard2 vs vue-clipboard3
  • vue-clipboard2:

    vue-clipboard2を選択するのは、Vue 2.xおよび3.xの両方をサポートし、シンプルで軽量なクリップボード操作が必要な場合です。特に、レガシーなVue 2プロジェクトとの互換性が重要な場合に適しています。

  • vue-clipboard3:

    vue-clipboard3を選択するのは、Vue 3専用のプロジェクトで、Composition APIを活用したよりモダンなアプローチを求めている場合です。Vue 3の新機能をフルに活用したい開発者にとって、より柔軟で拡張性のある選択肢です。

vue-clipboard2 のREADME

vue-clipboard2

A simple vuejs 2 binding for clipboard.js

Install

npm install --save vue-clipboard2 or use dist/vue-clipboard.min.js without webpack

Usage

For vue-cli user:

import Vue from 'vue'
import VueClipboard from 'vue-clipboard2'

Vue.use(VueClipboard)

For standalone usage:

<script src="vue.min.js"></script>
<!-- must place this line after vue.js -->
<script src="dist/vue-clipboard.min.js"></script>

I want to copy texts without a specific button!

Yes, you can do it by using our new method: this.$copyText. See sample2, where we replace the clipboard directives with a v-on directive.

Modern browsers have some limitations like that you can't use window.open without a user interaction. So there's the same restriction on copying things! Test it before you use it. Make sure you are not using this method inside any async method.

Before using this feature, read: this issue and this page first.

It doesn't work with bootstrap modals

See clipboardjs document and this pull request, container option is available like this:

let container = this.$refs.container
this.$copyText("Text to copy", container)

Or you can let vue-clipboard2 set container to current element by doing this:

import Vue from 'vue'
import VueClipboard from 'vue-clipboard2'

VueClipboard.config.autoSetContainer = true // add this line
Vue.use(VueClipboard)

Sample

<div id="app"></div>

<template id="t">
  <div class="container">
    <input type="text" v-model="message">
    <button type="button"
      v-clipboard:copy="message"
      v-clipboard:success="onCopy"
      v-clipboard:error="onError">Copy!</button>
  </div>
</template>

<script>
new Vue({
  el: '#app',
  template: '#t',
  data: function () {
    return {
      message: 'Copy These Text'
    }
  },
  methods: {
    onCopy: function (e) {
      alert('You just copied: ' + e.text)
    },
    onError: function (e) {
      alert('Failed to copy texts')
    }
  }
})
</script>

Sample 2

<div id="app"></div>

  <template id="t">
    <div class="container">
    <input type="text" v-model="message">
    <button type="button" @click="doCopy">Copy!</button>
    </div>
  </template>

  <script>
  new Vue({
    el: '#app',
    template: '#t',
    data: function () {
      return {
        message: 'Copy These Text'
      }
    },
    methods: {
      doCopy: function () {
        this.$copyText(this.message).then(function (e) {
          alert('Copied')
          console.log(e)
        }, function (e) {
          alert('Can not copy')
          console.log(e)
        })
      }
    }
  })
  </script>

You can use your Vue instance vm.$el to get DOM elements via the usual traversal methods, e.g.:

this.$el.children[1].children[2].textContent

This will allow you to access the rendered content of your components, rather than the components themselves.

Contribution

PRs welcome, and issues as well! If you want any feature that we don't have currently, please fire an issue for a feature request.

License

MIT License