#javascript #angular #webpack #types #fullcalendar
#javascript #angular #webpack #типы #полный календарь
Вопрос:
У меня эта ошибка:
Error: Please import the top-level fullcalendar lib before attempting to import a plugin.
Когда я добавил resourceTimeGridPlugin в плагины.
Мой код:
import dayGridPlugin from '@fullcalendar/daygrid';
import interactionPlugin, { Draggable } from '@fullcalendar/interaction';
import { FullCalendarComponent } from '@fullcalendar/angular';
import timeGridPlugin from '@fullcalendar/timegrid';
import resourceTimeGridPlugin from '@fullcalendar/resource-timegrid';
Ответ №1:
Вы должны включить объект Calendar Core в свой компонент:
import { Calendar } from '@fullcalendar/core';
В вашем конструкторе вы должны добавить это:
constructor() {
const name = Calendar.name;
}
Полный пример:
import { Component } from '@angular/core';
import { Calendar } from '@fullcalendar/core';
import dayGridPlugin from '@fullcalendar/daygrid';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
calendarOptions = {
plugins: [dayGridPlugin],
initialView: 'dayGridMonth'
};
constructor() {
const name = Calendar.name;
}
}
Это приводит к принудительной загрузке / инициализации основного компонента и ссылки VDom до того, как это понадобится плагину.
Комментарии:
1. Пока это будет работать, но по мере изменения кода с течением времени, если
Calendar
он станет неиспользуемым, TypeScript отменит импорт, и он снова завершится неудачей. Чтобы избежать такой возможности, будьте явны, поскольку для этого есть синтаксис.import '@fullcalendar/core';
. Это означает импортировать этот модуль из-за его побочных эффектов.
Ответ №2:
Это то, что я сделал, чтобы решить эту проблему в моем проекте.
в моем модуле импортируйте в этом порядке и зарегистрируйте мои плагины.
import { FullCalendarModule } from "@fullcalendar/angular";
import dayGridPlugin from '@fullcalendar/daygrid';
import interactionPlugin from '@fullcalendar/interaction';
import listPlugin from '@fullcalendar/list';
import momentPlugin from '@fullcalendar/moment';
import rrulePlugin from '@fullcalendar/rrule';
import timeGridPlugin from '@fullcalendar/timegrid';
FullCalendarModule.registerPlugins([
dayGridPlugin,
interactionPlugin,
listPlugin,
momentPlugin,
rrulePlugin,
timeGridPlugin
]);
в компоненте я использую это внутри моего конструктора непосредственно перед подготовкой моих calendarOptions
forwardRef(() =>Calendar);