У меня проблемы с настройкой vue-full-calendar для работы с Nuxt. Я создал плагин vue-full-calendar.js в каталоге плагинов, где я проверяю среду браузера:
import Vue from 'vue'
if (process.browser) {
window.onNuxtReady(() => {
const VueFullCalendar = require('vue-full-calendar')
Vue.use(VueFullCalendar)
})
}
Затем я добавил плагин в nuxt.config.js с ssr, установленным на false, вот так:
plugins: [
{ src: '~plugins/vue-full-calendar', ssr: false }
]
И я просто включаю его в раздел шаблонов моего файла страницы nuxt:
<template>
<div>
<full-calendar :events = "events" :header = "header" :config = "config" ref = "calendar"></full-calendar>
<appointment-dialog :show = "showAppointmentDialog"
:selectedAppointment = "selectedAppointment"
@dialog-close = "showAppointmentDialog = false">
</appointment-dialog>
</div>
</template>
<script>
import {mapGetters} from 'vuex'
import AppointmentDialog from '~/components/AppointmentDialog'
export default {
head () {
return {title: this.$t('appointments')}
},
data () {
return {
showAppointmentDialog: false,
selected: {},
header: {
center: 'title',
left: 'prev,next today',
right: 'agendaWeek,agendaDay'
},
events: []
}
},
fetch ({store, params}) {
store.dispatch('appointments/fetch')
store.dispatch('settings/fetch')
},
methods: {
goToDate (date) {
this.$refs.calendar.fireMethod('gotoDate', date)
}
},
watch: {
selectedDate (date) {
this.goToDate(date)
}
},
computed: {
...mapGetters({
selectedAppointment: 'appointments/selected',
appointments: 'appointments/appointments',
settings: 'settings/byName',
selectedDate: 'dates/selectedDate'
}),
config () {
return {
eventClick: (event) => {
this.selected = event.source.rawEventDefs[0]
this.$store.commit('SET_SELECTED_APPOINTMENT', this.selected)
this.showAppointmentDialog = true
},
firstDay: 1,
defaultDate: this.selectedDate,
allDaySlot: false,
slotDuration: 15,
slotLabelInterval: 'label',
minTime: 8,
maxTime: 19
}
}
},
components: {
AppointmentDialog
}
}
</script>
Однако в консоли я получаю две ошибки:
'The client-side rendered virtual DOM tree is not matching server-rendered content
'
'Unknown custom element: <full-calendar>
'
Но полный компонент календаря должен быть зарегистрирован глобально, поскольку я зарегистрировал его как плагин.
@ADyson, извините, я по ошибке разместил свой незаконченный вопрос. Я добавил дополнительную информацию о своей проблеме.
Теперь он работает. Сначала я сделал плагин vue-full-calendar.js в каталоге плагинов.
import Vue from 'vue';
import VueFullCalendar from 'vue-full-calendar';
Vue.use(VueFullCalendar);
Затем я добавил плагин в файл nuxt.config.js, задав для ssr значение false:
plugins: [
{ src: '~plugins/vue-full-calendar', ssr: false }
],
Затем на моей странице Nuxt в разделе шаблонов я установил компонент полного календаря как дочерний по отношению к компоненту no-ssr.
<template>
<div>
<no-ssr>
<full-calendar :events = "events" :header = "header" :config = "config" ref = "calendar">
</full-calendar>
</no-ssr>
</div>
</template>
Стоит отметить, что это не сработает, если вы будете использовать FullCalendar
вместо full-calendar
. Не знаю почему. Спасибо за решение!
если вам нужна помощь, вам нужно будет дать более подробное описание вашей проблемы, чем просто «возникшие проблемы».