Vue.js can be easily used to develop interactive user interface applications. In this article, we’ll look at how best packages for adding calendars, overlays, and handling local storage.
1. vue-fullcalendar
vue-fullcalendar provides us with a simple calendar component to display the events.
To use it, we first install it by running:
1 2 | npm i vue <span class="token operator">-</span> fullcalendar |
Then we use it by writing the following:
main.js
1 2 3 4 5 6 7 8 9 | import Vue from <span class="token double-quoted-string string">"vue"</span> <span class="token punctuation">;</span> import App from <span class="token double-quoted-string string">"./App.vue"</span> <span class="token punctuation">;</span> import fullCalendar from <span class="token double-quoted-string string">"vue-fullcalendar"</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> <span class="token function">component</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"full-calendar"</span> <span class="token punctuation">,</span> fullCalendar <span class="token punctuation">)</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> config <span class="token punctuation">.</span> productionTip <span class="token operator">=</span> <span class="token boolean constant">false</span> <span class="token punctuation">;</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> render <span class="token punctuation">:</span> h <span class="token operator">=</span> <span class="token operator">></span> <span class="token function">h</span> <span class="token punctuation">(</span> App <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token variable">$mount</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"#app"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
App.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div id <span class="token operator">=</span> <span class="token double-quoted-string string">"app"</span> <span class="token operator">></span> <span class="token operator"><</span> full <span class="token operator">-</span> calendar <span class="token punctuation">:</span> events <span class="token operator">=</span> <span class="token double-quoted-string string">"fcEvents"</span> lang <span class="token operator">=</span> <span class="token double-quoted-string string">"en"</span> <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> full <span class="token operator">-</span> calendar <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> <span class="token keyword">const</span> fcEvents <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> title <span class="token punctuation">:</span> <span class="token double-quoted-string string">"eat"</span> <span class="token punctuation">,</span> start <span class="token punctuation">:</span> <span class="token double-quoted-string string">"2020-05-25"</span> <span class="token punctuation">,</span> end <span class="token punctuation">:</span> <span class="token double-quoted-string string">"2020-05-27"</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> export <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> fcEvents <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
We subscribe to the component. Then use it in the App
component.
full-calendar
takes an events
prop, which is an array of objects.
Objects have title
, start
and end
properties.
title
is the title of the event.
start
is the start
date string. end
is the end
date string.
It generates events when the month is changed and a clicked event.
2.v-calendar
v-calendar
is another calendar component. To install, run the command:
1 2 | npm i v <span class="token operator">-</span> calendar |
Now using it, we write the following code:
main.js
1 2 3 4 5 6 7 8 9 10 11 | import Vue from <span class="token double-quoted-string string">"vue"</span> <span class="token punctuation">;</span> import App from <span class="token double-quoted-string string">"./App.vue"</span> <span class="token punctuation">;</span> import Calendar from <span class="token double-quoted-string string">"v-calendar/lib/components/calendar.umd"</span> <span class="token punctuation">;</span> import DatePicker from <span class="token double-quoted-string string">"v-calendar/lib/components/date-picker.umd"</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> <span class="token function">component</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"calendar"</span> <span class="token punctuation">,</span> Calendar <span class="token punctuation">)</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> <span class="token function">component</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"date-picker"</span> <span class="token punctuation">,</span> DatePicker <span class="token punctuation">)</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> config <span class="token punctuation">.</span> productionTip <span class="token operator">=</span> <span class="token boolean constant">false</span> <span class="token punctuation">;</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> render <span class="token punctuation">:</span> h <span class="token operator">=</span> <span class="token operator">></span> <span class="token function">h</span> <span class="token punctuation">(</span> App <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token variable">$mount</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"#app"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
App.vue
to add a date picker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div id <span class="token operator">=</span> <span class="token double-quoted-string string">"app"</span> <span class="token operator">></span> <span class="token operator"><</span> date <span class="token operator">-</span> picker <span class="token punctuation">:</span> mode <span class="token operator">=</span> <span class="token double-quoted-string string">"mode"</span> v <span class="token operator">-</span> model <span class="token operator">=</span> <span class="token double-quoted-string string">"selectedDate"</span> <span class="token operator">/</span> <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> export <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">data</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> mode <span class="token punctuation">:</span> <span class="token double-quoted-string string">"single"</span> <span class="token punctuation">,</span> selectedDate <span class="token punctuation">:</span> <span class="token constant">null</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
to add a calendar:
1 2 3 4 5 6 7 8 9 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div id <span class="token operator">=</span> <span class="token double-quoted-string string">"app"</span> <span class="token operator">></span> <span class="token operator"><</span> calendar <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> calendar <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> export <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
3. VueLocalStorage
VueLocalStorage is a Vue plugin that handles local storage in the Vue app.
To install, run the command:
1 2 | npm i vue <span class="token operator">-</span> localstorage |
Then, to use it, we write code like this: main.js
1 2 3 4 5 6 7 8 9 | import Vue from <span class="token double-quoted-string string">"vue"</span> <span class="token punctuation">;</span> import App from <span class="token double-quoted-string string">"./App.vue"</span> <span class="token punctuation">;</span> import VueLocalStorage from <span class="token double-quoted-string string">"vue-localstorage"</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> <span class="token keyword">use</span> <span class="token punctuation">(</span> VueLocalStorage <span class="token punctuation">)</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> config <span class="token punctuation">.</span> productionTip <span class="token operator">=</span> <span class="token boolean constant">false</span> <span class="token punctuation">;</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> render <span class="token punctuation">:</span> h <span class="token operator">=</span> <span class="token operator">></span> <span class="token function">h</span> <span class="token punctuation">(</span> App <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token variable">$mount</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"#app"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
App.vue
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div id <span class="token operator">=</span> <span class="token double-quoted-string string">"app"</span> <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> export <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">mounted</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> this <span class="token punctuation">.</span> <span class="token variable">$localStorage</span> <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'foo'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'bar'</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
We sign up for the plugin.
Then we can manipulate the local storage with the this.$localStorage
.
We can call get
to get a value:
1 2 | this <span class="token punctuation">.</span> <span class="token variable">$localStorage</span> <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'foo'</span> <span class="token punctuation">)</span> |
To delete an entry, we call remove
:
1 2 | this <span class="token punctuation">.</span> <span class="token variable">$localStorage</span> <span class="token punctuation">.</span> <span class="token function">remove</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'foo'</span> <span class="token punctuation">)</span> |
4. vue-loading-overlay
vue-loading-overlay gives us an overlay to show when something is loaded.
To install, run the command:
1 2 | npm i vue <span class="token operator">-</span> loading <span class="token operator">-</span> overlay |
Then, to use it, write the following code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div <span class="token operator">></span> <span class="token operator"><</span> loading active can <span class="token operator">-</span> cancel <span class="token punctuation">:</span> on <span class="token operator">-</span> cancel <span class="token operator">=</span> <span class="token double-quoted-string string">"onCancel"</span> is <span class="token operator">-</span> full <span class="token operator">-</span> page <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> loading <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> import Loading from <span class="token double-quoted-string string">"vue-loading-overlay"</span> <span class="token punctuation">;</span> import <span class="token double-quoted-string string">"vue-loading-overlay/dist/vue-loading.css"</span> <span class="token punctuation">;</span> export <span class="token keyword">default</span> <span class="token punctuation">{</span> components <span class="token punctuation">:</span> <span class="token punctuation">{</span> Loading <span class="token punctuation">}</span> <span class="token punctuation">,</span> methods <span class="token punctuation">:</span> <span class="token punctuation">{</span> <span class="token function">onCancel</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
We use the loading
component to add an overlay to display when the data is loaded.
active
is a prop that is set to true
if you want to display an overlay.
can-cancel
causes the overlay to be canceled.
Then when we cancel the onCancel
method is called, because we set it as the value of on-cancel
prop.
We can use it as a plugin.
For example, we could write:
main.js
1 2 3 4 5 6 7 8 9 10 | import Vue from <span class="token double-quoted-string string">"vue"</span> <span class="token punctuation">;</span> import App from <span class="token double-quoted-string string">"./App.vue"</span> <span class="token punctuation">;</span> import Loading from <span class="token double-quoted-string string">"vue-loading-overlay"</span> <span class="token punctuation">;</span> import <span class="token double-quoted-string string">"vue-loading-overlay/dist/vue-loading.css"</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> <span class="token keyword">use</span> <span class="token punctuation">(</span> Loading <span class="token punctuation">)</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> config <span class="token punctuation">.</span> productionTip <span class="token operator">=</span> <span class="token boolean constant">false</span> <span class="token punctuation">;</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> render <span class="token punctuation">:</span> h <span class="token operator">=</span> <span class="token operator">></span> <span class="token function">h</span> <span class="token punctuation">(</span> App <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token variable">$mount</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"#app"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
App.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div ref <span class="token operator">=</span> <span class="token double-quoted-string string">"container"</span> <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> export <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function">mounted</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> this <span class="token punctuation">.</span> <span class="token variable">$loading</span> <span class="token punctuation">.</span> <span class="token function">show</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> container <span class="token punctuation">:</span> this <span class="token punctuation">.</span> <span class="token variable">$refs</span> <span class="token punctuation">.</span> container <span class="token punctuation">,</span> canCancel <span class="token punctuation">:</span> <span class="token boolean constant">true</span> <span class="token punctuation">,</span> onCancel <span class="token punctuation">:</span> this <span class="token punctuation">.</span> onCancel <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> methods <span class="token punctuation">:</span> <span class="token punctuation">{</span> <span class="token function">onCancel</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
We call this.$loading.show
to render the overlay.
The container
property is set to the ref (reference) of the container we want to overlay on.
onCancel
has a method to call when it’s destroyed.
5. Conclusion
vue-fullcalendar is a calendar and date selector component.
vue-loading-overlay is an overlay component used when loading data.
VueLocalStorage is a plugin to handle local storage in the Vue app.