我正在使用没有jquery的fullCalendar v4.0。我已经这样初始化了
<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()
,以便在select中调用它,但出现错误
Uncaught TypeError: Cannot read property 'selectCalendar' of undefined
我想对select
,eventClick
,eventDrop
,eventResize
进行一些操作,但是无法在配置中调用方法。
还有什么方法可以将select或任何方法定义为
select: this.selectCalendar
这样它就可以直接向定义的方法发送事件?
我尝试了vue-fullcalendar,但对我的原因不起作用。任何帮助将不胜感激。
Vue v.2.5.21
答案 0 :(得分:0)
我正在使用vue完整日历,您可以像下面的代码一样处理fullcalendar事件
<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)
}
}
}
答案 1 :(得分:0)
这就是我整理出来的方式。
<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
在一个事件中找到它,但是自定义事件应该具有唯一的ID。通过它可以找到并删除它。