FullCalendar 4.0 в приложении Vue
Я использую fullCalendar v4.0 без jquery. Я инициализировал это так
<div id="calendar"></div>
В объекте данных у меня есть это.
calendar: null,
config: {
plugins: [ interactionPlugin, dayGridPlugin, timeGridPlugin, listPlugin, momentPlugin],
axisFormat: 'HH',
defaultView: 'timeGridWeek',
allDaySlot: false,
slotDuration: '00:60:00',
columnFormat: 'dddd',
titleFormat: 'dddd, MMMM D, YYYY',
defaultDate: '1970-01-01',
dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
eventLimit: true,
eventOverlap: false,
eventColor: '#458CC7',
firstDay: 1,
height: 'auto',
selectHelper: true,
selectable: true,
timezone: 'local',
header: {
left: '',
center: '',
right: '',
},
select: (event) => {
this.selectCalendar(event)
},
header: false,
events: null
}
}
имея календарь в переменной данных, теперь я могу render()
а также destroy()
это откуда угодно. Но у меня проблема с обработкой событий Календаря:
Такие как
select: (event) => {
this.selectCalendar(event)
}
Я определил другой метод в methods: {}
как selectCalendar()
позвонить в избранном, но я получаю сообщение об ошибке
Uncaught TypeError: Cannot read property 'selectCalendar' of undefined
Я хочу сделать несколько операций на select
, eventClick
, eventDrop
, eventResize
, но я не могу вызвать метод в конфигурации.
Также есть ли способ определить select или любой метод как
select: this.selectCalendar
Чтобы он просто отправлял событие определенному методу?
Я пробовал vue-fullcalendar, но он не работает по моей причине. Любая помощь будет благодарна.
Vue v.2.5.21
2 ответа
Вот как я с этим разобрался.
- в HTML
<div id="calendar"></div>
в вашем
data() => {}
calendar: null, config: { plugins: [ interactionPlugin, dayGridPlugin, timeGridPlugin, listPlugin, momentPlugin], axisFormat: 'HH', defaultView: 'timeGridWeek', allDaySlot: false, slotDuration: '00:60:00', columnFormat: 'dddd', columnHeaderFormat: { weekday: 'short' }, defaultDate: '1970-01-01', dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], eventLimit: true, eventOverlap: false, eventColor: '#458CC7', firstDay: 1, height: 'auto', selectHelper: true, selectable: true, timezone: 'UTC', header: { left: '', center: '', right: '', }, header: false, editable: true, events: null }
Не определяйте select
, resize
или же dropEvent
в конфигурации в первый раз, но затем часть, где вы собираетесь сделать календарь сделать что-то вроде этого
if (this.calendar == null) {
console.log(this.schedule)
let calendarEl = document.getElementById('calendar');
let calendarConfig = this.config
let select = (event) => {
this.selectCalendar(event)
}
let eventClick = (event) => {
this.clickCalendar(event)
}
let eventDrop = (event) => {
this.dropCalendar(event)
}
let eventResize = (event) => {
this.resizeCalendar(event)
}
calendarConfig.select = select;
calendarConfig.eventClick = eventClick;
calendarConfig.eventDrop = eventDrop;
calendarConfig.eventResize = eventResize;
this.calendar = new Calendar(calendarEl, calendarConfig);
this.calendar.render();
this.renderEvents()
}
Теперь вы можете обрабатывать эти события FullCalendar в ваших собственных методах.
Также имея календарь в this.calendar
дает вам возможность уничтожить его из любого места, в methods: {}
В FullCalendar 4.0 все изменилось, но все стало проще.
это методы, прикрепленные к событиям FullCalendar
selectCalendar(event) {
this.calendar.addEvent(event)
},
clickCalendar(event) {
if (window.confirm("Are you sure you want to delete this event?")) {
let findingID = null
if (event.event.id === "") {
findingID = event.el
} else {
findingID = event.event.id
}
let removeEvent = this.calendar.getEventById( findingID )
removeEvent.remove()
}
},
dropCalendar(event) {
},
resizeCalendar(event) {
},
destroyCalendar() {
if (this.calendar != null) {
this.calendar.destroy();
this.calendar = null
}
}
когда событие добавлено вами. Вы можете найти это через el
в событии, но пользовательские события должны иметь уникальный идентификатор. через который вы найдете и удалите его.
Я использую полный календарь Vue, вы можете обрабатывать событие полного календаря, как показано ниже
<full-calendar :event-sources="eventSources" @event-selected="myEventSelected"></full-calendar>
export default{
methods:{
caculateSomething(event){
//do st here
},
myEventSelected(event){
//do st here
this.caculateSomething(event)
console.log(event)
}
}
}