Vue3 FullCalendar is an event calendar based on the FullCalendar library. It supports Vue 3 with PrimeVue 3 and Vue 2 with PrimeVue 2.
Setup
Refer to PrimeVue setup documentation for download and installation steps for your environment such as Vue CLI, Vite or browser.
Import
import FullCalendar from 'primevue/fullcalendar';
Getting Started
FullCalendar is a wrapper around on FullCalendar 5.4.0+ so fullcalendar needs to be included in your project. For a complete documentation and samples please refer to the fullcalendar website.
npm install @fullcalendar/core --save
FullCalendar is plugin based so install the plugins you require and define them with the options property.
npm install @fullcalendar/daygrid --save
npm install @fullcalendar/timegrid --save
npm install @fullcalendar/interaction --save
Events should be an array and defined using the events property.
<FullCalendar :events="events" />
export default {
data() {
return {
events: [
{
"id": 1,
"title": "All Day Event",
"start": "2019-01-01"
},
{
"id": 2,
"title": "Long Event",
"start": "2019-01-07",
"end": "2019-01-10"
},
{
"id": 3,
"title": "Repeating Event",
"start": "2019-01-09T16:00:00"
},
{
"id": 4,
"title": "Repeating Event",
"start": "2019-01-16T16:00:00"
},
{
"id": 5,
"title": "Conference",
"start": "2019-01-11",
"end": "2019-01-13"
},
{
"id": 6,
"title": "Meeting",
"start": "2019-01-12T10:30:00",
"end": "2019-01-12T12:30:00"
}
]
};
}
}
In a real application, it is likely to populate the events by making a remote call, when the events are updated, the component will detect the change and render them.
import axios from 'axios';
export default class EventService {
getEvents() {
return axios.get('demo/data/events.json').then(res => res.data.data);
}
}
import EventService from '../../service/EventService';
export default {
data() {
return {
events: null
};
},
eventService: null,
created() {
this.eventService = new EventService();
},
mounted() {
this.eventService.getEvents().then(data => this.events = data);
}
}
Options
FullCalendar has a long list of customization parameters that can be defined with the options property. Example below customizes the plugins, header and editable properties.
<FullCalendar :events="events" :options="options" />
import EventService from '../../service/EventService';
import dayGridPlugin from '@fullcalendar/daygrid';
import timeGridPlugin from '@fullcalendar/timegrid';
import interactionPlugin from '@fullcalendar/interaction';
export default {
data() {
return {
options: {
plugins:[dayGridPlugin, timeGridPlugin, interactionPlugin],
initialDate: '2019-01-01',
headerToolbar: {
left: 'prev,next',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true
},
events: null
};
},
eventService: null,
created() {
this.eventService = new EventService();
},
mounted() {
this.eventService.getEvents().then(data => this.events = data);
}
}
Callbacks
Callbacks of the FullCalendar such as dateClick are also defined with the options property.
export default {
data() {
return {
options: {
plugins:[dayGridPlugin, timeGridPlugin, interactionPlugin],
initialDate: '2019-01-01',
headerToolbar: {
left: 'prev,next',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true,
dateClick: (e) => {
//handle date click
}
}
};
}
}
Theming
FullCalendar supports various themes featuring Material, Bootstrap, Fluent as well as your own custom themes via the Designer tool.
Resources
Visit the PrimeVue FullCalendar showcase for demos and documentation.