目次
fullcalendar-vueとは
fullcalendar-vueは、FullCalendarが配布しているVue.js用の公式カレンダーコンポーネントです。
FullCalendarは、Githubスター9000超え、Used by 18000超えのモンスターライブラリです。
ビューの表示が多義に渡り、月のビューから時間のタイムラインまで選択することができます。
日付のクリックイベントやドラックセレクトも行えます。
インストール
以下のnpm、CDNを使ってインストールします。
npm
npm install --save @fullcalendar/vue @fullcalendar/core @fullcalendar/daygrid @fullcalendar/interaction
CDN
<link href="https://cdn.jsdelivr.net/npm/@fullcalendar/core@4.2.0/main.css" rel='stylesheet'> <link href="https://cdn.jsdelivr.net/npm/@fullcalendar/daygrid@4.2.0/main.css" rel='stylesheet'> <link href="https://unpkg.com/@fullcalendar/timegrid@4.3.0/main.min.css" rel='stylesheet'> <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/core@4.2.0/main.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/interaction@4.3.0/main.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/daygrid@4.2.0/main.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/vue@4.2.2/main.umd.min.js"></script>
gitリポジトリは以下から取得できます。
https://github.com/fullcalendar/fullcalendar-vue/
導入手順
カレンダーコンポーネントを実装します。
1. ライブラリの取り込み
(1)webpack等の場合 ※モジュール版は未検証です。
import FullCalendar from '@fullcalendar/vue' import dayGridPlugin from '@fullcalendar/daygrid' import FullCalendarInteraction from '@fullcalendar/interaction'; @import '~@fullcalendar/core/main.css'; @import '~@fullcalendar/daygrid/main.css';
(2)WEBページの場合
const dayGridPlugin = window.FullCalendarDayGrid.default; const FullCalendarInteraction = window.FullCalendarInteraction.default;
2.メソッドを設定
var today = new Date(); var day1 = new Date(today.getFullYear(), today.getMonth(), today.getDate()+1); var day2 = new Date(today.getFullYear(), today.getMonth(), today.getDate()+2); var day3 = new Date(today.getFullYear(), today.getMonth(), today.getDate()+3); Vue.component('calender', { template: '#calender', data: function() { return { calendarPlugins: [ dayGridPlugin, FullCalendarInteraction ], events: [ { title: 'event 1', date: day1 }, { title: 'event 2', date: day2 } ], header:{ left: 'title', center: 'addPostButton', right: 'today prev,next' }, buttonText: { today: '今日' }, customButtons: { addPostButton: { text: '追加!', click: function() { app.$children[0].events.push({ title: 'event 3', date: day3 }); } } }, } }, methods: { handleDateClick: function(info) { console.log(info); alert('click day :' + info.dateStr); } } }); let app = new Vue({ el: '#app', });
3. テンプレートを準備
<fullCalendar>
コンポーネントのイベントがキャメルケースになっているので、HTMLに直書きですとイベントが動作しません。
https://www.kabanoki.net/4502/
そこで、 <fullCalendar>
コンポーネントを別のコンポーネントに取り込みます。
<div id="app"> <script type="text/x-template" id="calender"> <fullCalendar @dateClick="handleDateClick" ref="fullCalendar" default-view="dayGridMonth" :plugins="calendarPlugins" :locale="'ja'" :events="events" :header="header" :buttonText="buttonText" :customButtons="customButtons" /> </script> <calender /> </div>
サンプル
「'Symbol' は定義されていません」
IE11以前のブラウザを使うと上記のエラーが表示されます。
これはES2015に対応してないのが原因みたいです。
ひとまず以下のライブラリを呼び出せば解決します。
<script src="https://cdn.jsdelivr.net/npm/@babel/polyfill@7.4.4/dist/polyfill.min.js"></script>
さいごに
カレンダーページを作成するカレンダーコンポーネントでした。
無料なのに超高機能なライブラリです。
8月の頭辺りから調査を開始していましたが、サンプルを実装するまでに多大な労力を要しました。
(疲れて記事が導入までになってしまいました・・・
もちろん苦労に応じた恩恵のあるライブラリです。
ぜひ試してみてください。
今日はこの辺でー