Adding a calendar widget by hand is very painful.
Therefore, many calendar component libraries are created.
vue-simple-calendar is one library.
In this article, we’ll look at how to add a calendar with the
vue-simple-calendar library.
Getting Started
We add our library by installing it with NPM.
To do that, we run:
npm i vue-simple-calendar
Add a Simple Calendar
We can add a simple calendar with the calendar-view component.
To add it, we write:
<template>
<div id="app">
<calendar-view
:show-date="showDate"
class="theme-default holiday-us-traditional holiday-us-official"
>
<calendar-view-header
slot="header"
slot-scope="t"
:header-props="t.headerProps"
@input="setShowDate"
/>
</calendar-view>
</div>
</template>
<script>
import { CalendarView, CalendarViewHeader } from "vue-simple-calendar";
import "vue-simple-calendar/static/css/default.css";
import "vue-simple-calendar/static/css/holidays-us.css";
export default {
name: "app",
data() {
return { showDate: new Date() };
},
components: {
CalendarView,
CalendarViewHeader
},
methods: {
setShowDate(d) {
this.showDate = d;
}
}
};
</script>
We import the CSS and register the components within our component.
The showDate prop has the date object which controls the month to be shown.
The calendar-view-header component has the header that lets us navigate through the months.
When we choose a month on the header, the input event is emitted.
Adding Calendar Events
We can set the events prop to populate the calendar with events.
For example, we can write:
<template>
<div id="app">
<calendar-view
:show-date="showDate"
:events="events"
class="theme-default holiday-us-traditional holiday-us-official"
@click-date="onClickDate"
>
<calendar-view-header
slot="header"
slot-scope="t"
:header-props="t.headerProps"
@input="setShowDate"
/>
</calendar-view>
</div>
</template>
<script>
import { CalendarView, CalendarViewHeader } from "vue-simple-calendar";
import "vue-simple-calendar/static/css/default.css";
import "vue-simple-calendar/static/css/holidays-us.css";
export default {
name: "app",
data() {
return {
showDate: new Date(),
events: [
{
id: 1,
startDate: "2020-10-19",
endDate: "2020-10-19",
title: "Sample event 1"
},
{
id: 2,
startDate: "2020-10-06",
endDate: "2020-10-13",
title: "Sample event 2"
}
]
};
},
components: {
CalendarView,
CalendarViewHeader
},
methods: {
setShowDate(d) {
this.showDate = d;
},
onClickDate(...params) {
console.log(params);
}
}
};
</script>
We have the events array which we set as the value of the events prop.
Each entry has the id with the unique ID.
startDate has the start date of the event.
endDate has the end date of the event.
title has the title of the event.
id and startDate are required.
title defaults to 'untitled' .
It also emits events that we can listen to.
For example, we can listen to the click-date event which has the date that we clicked on and the mouse events as parameters.
The events will be shown on the calendar.
Slots
vue-simple-calendar can be customized by populating various slots.
periodStart lets us customize the first date of the display period.
periodEnd lets us customize the last date of the display period.
displayLocale lets us show the locale setting for the calendar.
monthNames sets the month names.
There’re many more slots listed at https://github.com/richardtallent/vue-simple-calendar#slots.
Conclusion
vue-simple-calendar is a simple library for adding a calendar to our Vue app.