fullcalendar angular - 在 eventDrop 和 eventResize 上更新数据库
fullcalendar angular - updating database on eventDrop and eventResize
我在 angular 项目中设置了完整日历,并成功地从我的 api 中提取数据来填充事件:
@Component({
selector: 'app-installboard',
templateUrl: './installboard.component.html',
styleUrls: ['./installboard.component.scss']
})
export class InstallboardComponent implements OnInit {
appointments: any = [];
constructor(private appointmentService: AppointmentService) { }
ngOnInit(): void {
this.pullAppointments();
}
public pullAppointments() {
this.appointmentService.getInstallBoardAppointments().subscribe(data => {
// logic for processing data into events array //
this.renderCalendar();
});
}
我 运行 遇到麻烦的地方就在这里。我已将 eventDrop 和 eventResize 添加到日历中,但我对它们的回调函数的范围感到很困惑?我希望能够调用我的服务并传入参数以创建一个 api 回叫数据库并保存更新。
我尝试调用该服务以及组件中的 public 函数,但都抛出打字稿错误,说明函数不存在。
public renderCalendar() {
var calendarEl = document.getElementById('calendar');
var calendar = new Calendar(calendarEl, {
plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin, bootstrapPlugin],
editable: true,
themeSystem: 'bootstrap',
header: { center: 'dayGridMonth, timeGridWeek, list' },
timeZone: 'UTC',
businessHours: {
daysOfWeek: [1, 2, 3, 4, 5],
startTime: '08:30',
endTime: '17:00'
},
slotDuration: '00:15:00',
slotLabelInterval: '01:00',
scrollTime: '08:00:00',
hiddenDays: [0],
eventSources: this.appointments,
eventDrop: function(info) {
console.log(info.event.id);
console.log(info.event.start);
console.log(info.event.end);
this.appointmentService.updateInstallBoardAppointments(info);
},
eventResize: function(info) {
alert('it changed');
}
});
calendar.render();
}
可能存在自引用问题。试试这个
public renderCalendar() {
var calendarEl = document.getElementById('calendar');
var self=this;
var calendar = new Calendar(calendarEl, {
plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin, bootstrapPlugin],
editable: true,
themeSystem: 'bootstrap',
header: { center: 'dayGridMonth, timeGridWeek, list' },
timeZone: 'UTC',
businessHours: {
daysOfWeek: [1, 2, 3, 4, 5],
startTime: '08:30',
endTime: '17:00'
},
slotDuration: '00:15:00',
slotLabelInterval: '01:00',
scrollTime: '08:00:00',
hiddenDays: [0],
eventSources: this.appointments,
eventDrop: function(info) {
console.log(info.event.id);
console.log(info.event.start);
console.log(info.event.end);
self.appointmentService.updateInstallBoardAppointments(info);
},
eventResize: function(info) {
alert('it changed');
}
});
calendar.render();
}
我在 angular 项目中设置了完整日历,并成功地从我的 api 中提取数据来填充事件:
@Component({
selector: 'app-installboard',
templateUrl: './installboard.component.html',
styleUrls: ['./installboard.component.scss']
})
export class InstallboardComponent implements OnInit {
appointments: any = [];
constructor(private appointmentService: AppointmentService) { }
ngOnInit(): void {
this.pullAppointments();
}
public pullAppointments() {
this.appointmentService.getInstallBoardAppointments().subscribe(data => {
// logic for processing data into events array //
this.renderCalendar();
});
}
我 运行 遇到麻烦的地方就在这里。我已将 eventDrop 和 eventResize 添加到日历中,但我对它们的回调函数的范围感到很困惑?我希望能够调用我的服务并传入参数以创建一个 api 回叫数据库并保存更新。
我尝试调用该服务以及组件中的 public 函数,但都抛出打字稿错误,说明函数不存在。
public renderCalendar() {
var calendarEl = document.getElementById('calendar');
var calendar = new Calendar(calendarEl, {
plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin, bootstrapPlugin],
editable: true,
themeSystem: 'bootstrap',
header: { center: 'dayGridMonth, timeGridWeek, list' },
timeZone: 'UTC',
businessHours: {
daysOfWeek: [1, 2, 3, 4, 5],
startTime: '08:30',
endTime: '17:00'
},
slotDuration: '00:15:00',
slotLabelInterval: '01:00',
scrollTime: '08:00:00',
hiddenDays: [0],
eventSources: this.appointments,
eventDrop: function(info) {
console.log(info.event.id);
console.log(info.event.start);
console.log(info.event.end);
this.appointmentService.updateInstallBoardAppointments(info);
},
eventResize: function(info) {
alert('it changed');
}
});
calendar.render();
}
可能存在自引用问题。试试这个
public renderCalendar() {
var calendarEl = document.getElementById('calendar');
var self=this;
var calendar = new Calendar(calendarEl, {
plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin, bootstrapPlugin],
editable: true,
themeSystem: 'bootstrap',
header: { center: 'dayGridMonth, timeGridWeek, list' },
timeZone: 'UTC',
businessHours: {
daysOfWeek: [1, 2, 3, 4, 5],
startTime: '08:30',
endTime: '17:00'
},
slotDuration: '00:15:00',
slotLabelInterval: '01:00',
scrollTime: '08:00:00',
hiddenDays: [0],
eventSources: this.appointments,
eventDrop: function(info) {
console.log(info.event.id);
console.log(info.event.start);
console.log(info.event.end);
self.appointmentService.updateInstallBoardAppointments(info);
},
eventResize: function(info) {
alert('it changed');
}
});
calendar.render();
}