Vue.jsでTwitterのような投票システムを実装する「vue-poll」

vue-pollとは

vue-pollは、Twitterのような投票システムコンポーネントライブラリです。

投票をしなくても結果を確認したり、複数の投票を行う設定をすることも可能です。

 

【動画サイズ:29KB】

 

環境

この記事は、以下の管理人の検証環境にて記事にしています。

vue.js 2.6.10
vue-poll 0.1.8

 

ライブラリの取得

ライブラリを取得するには、npm, CDNのどれか一つを使用します。

npm

npm install vue-poll

CDN

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue-poll.min.js"></script>

gitリポジトリは以下から取得できます。

 

導入手順

管理人が行った、動作確認サンプルを実装するために、以下の手順でソースコードを導入していきます。
このサンプルでは、Twitterのような投票機能を実装します。

 

step
1
ライブラリの呼び出し

まずライブラリを呼び出す為に、以下の2通りのケースで呼び出します。

ES6等で実装する場合

import VuePoll from 'vue-poll'

UMDで実装する場合

const VuePoll = window['VuePoll'].install;

 

step
2
メソッドを設定

上記で取得したVuePollVue.useに取り込みます。
質問(question)回答(answers)を設定するプロパティを用意します。
複数回答などのプロパティを設定する方法は以下のURLより確認してください。

回答が完了した時に発生するイベント(addVote)をmethodsで用意します。

Vue.use(VuePoll);

new Vue({
  el: '#app',
  data: {
    options: {
        question: 'あなたのお気に入りの <strong>JS</strong> フレームワークは何ですか?',
        answers: [
            { value: 1, text: 'Vue', votes: 53 },
            { value: 2, text: 'React', votes: 35 },
            { value: 3, text: 'Angular', votes: 30 },
            { value: 4, text: 'Other', votes: 10 } 
        ]
    }
  },
  methods: {
      addVote: function(obj){
          console.log('You voted ' + obj.value + '!');
      }
  }
});

 

step
3
テンプレートを準備

<vue-poll>を配置します。
ライブラリのオプションをv-bind="options" で設定します。
回答が完了した時に起きるイベントを@addvote="addVote" で設定します。

サンプルはケバブケースで記載しています。

<div id="app">
  <vue-poll v-bind="options" @addvote="addVote"></vue-poll>
</div>

 

サンプル

今回のソースを実際に触って確認できるようにデモを用意しました。

See the Pen Vue.jsでTwitterのような投票システムを実装する「vue-poll」 by カバの樹 (@kabanoki) on CodePen.dark

 

さいごに

Twitterのような投票システムコンポーネントライブラリでした。

管理人が、新人歓迎会でこのvue-pollfirebaseを組み合わせて、リアルタイム投票システムを作ったら、かなり盛り上がりました。
もし催しを控えているプログラマーさんとか居たら、試してみてはいかがでしょうか?

今日はこの辺でー

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-Miscellaneous, UI Components, vue.js, ライブラリ
-, , , ,