基于以下内容,我正在尝试将Firebase后端添加到FullCalendar Vue组件:
(https://github.com/fullcalendar/fullcalendar-example-projects/tree/master/vue)。到目前为止,我已经成功设置了handleDateClick()
方法来将日历事件推送到Firestore中。我正在尝试使用Vuefire firestore
选项将存储的日历事件返回到calendarEvents
数据对象。然后应将事件呈现在日历上。但是,我没有看到任何存储的事件返回到屏幕。我在calendarEvents
选项中console.logged firestore()
,并在那里看到了事件。知道什么会阻止事件返回屏幕吗?
我的完整组件在这里:
<template>
<div class='demo-app'>
<div class='demo-app-top'>
<button @click="toggleWeekends">toggle weekends</button>
<button @click="gotoPast">go to a date in the past</button>
(also, click a date/time to add an event)
</div>
<FullCalendar
class='demo-app-calendar'
ref="fullCalendar"
defaultView="dayGridMonth"
:header="{
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
}"
:plugins="calendarPlugins"
:weekends="calendarWeekends"
:events="calendarEvents"
@dateClick="handleDateClick"
/>
</div>
</template>
<script>
import FullCalendar from '@fullcalendar/vue'
import dayGridPlugin from '@fullcalendar/daygrid'
import timeGridPlugin from '@fullcalendar/timegrid'
import interactionPlugin from '@fullcalendar/interaction'
import { db } from '@/main'
export default {
components: {
FullCalendar // make the <FullCalendar> tag available
},
data: function() {
return {
calendarPlugins: [ // plugins must be defined in the JS
dayGridPlugin,
timeGridPlugin,
interactionPlugin // needed for dateClick
],
calendarWeekends: true,
calendarEvents: []
}
},
firestore () {
return {
calendarEvents: db.collection('events')
}
},
methods: {
toggleWeekends() {
this.calendarWeekends = !this.calendarWeekends // update a property
},
gotoPast() {
let calendarApi = this.$refs.fullCalendar.getApi() // from the ref="..."
calendarApi.gotoDate('2000-01-01') // call a method on the Calendar object
},
async handleDateClick(arg) {
if (confirm('Would you like to add an event to ' + arg.dateStr + ' ?')) {
await db.collection('events').add({
title: 'New Event',
start: arg.date,
allDay: arg.allDay
})
}
}
}
}
</script>
<style lang='scss'>
// you must include each plugins' css
// paths prefixed with ~ signify node_modules
@import '~@fullcalendar/core/main.css';
@import '~@fullcalendar/daygrid/main.css';
@import '~@fullcalendar/timegrid/main.css';
.demo-app {
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
font-size: 14px;
}
.demo-app-top {
margin: 0 0 3em;
}
.demo-app-calendar {
margin: 0 auto;
max-width: 900px;
}
</style>