我正在使用 PrimeNG Full Calendar 组件开发一个 Angular 应用程序,这个:https ://primefaces.org/primeng/showcase/#/fullcalendar
这是基于 Angular FullCalendar 组件,这个:https ://fullcalendar.io/
在这里你可以找到我的整个代码:https ://bitbucket.org/dgs_poste_team/soc_calendar/src/master/
我在尝试动态更改日历上呈现的事件的背景颜色时发现了一些困难。我必须根据不同的事件信息(开始事件时间)有不同的事件背景颜色,例如:如果一个事件从 07:00 开始是绿色,如果它从 15:00 开始它是红色,如果它从 23 开始: 00 它是蓝色的,但此时这个逻辑并不重要)。
在我的项目中,我将外部事件拖到我的日历中,如下所示:https ://fullcalendar.io/docs/external-dragging-demo
所以我想要的是,当我将一个事件拖到我的日历中时,它的背景将具有基于开始时间的特定颜色。
因此,正如您在我的 BitBucket 存储库中看到的那样,我有这个FullcalendarComponent处理包含从外部组件接收事件的日历的组件:
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
import { EventService } from '../event.service';
import dayGridPlugin from '@fullcalendar/daygrid';
import timeGridPlugin from '@fullcalendar/timegrid';
import listPlugin from '@fullcalendar/list';
import interactionPlugin, { Draggable } from '@fullcalendar/interaction';
import { FullCalendar } from 'primeng';
@Component({
selector: 'app-fullcalendar',
templateUrl: './fullcalendar.component.html',
styleUrls: ['./fullcalendar.component.css']
})
export class FullcalendarComponent implements OnInit {
events: any[];
options: any;
header: any;
//people: any[];
@ViewChild('fullcalendar') fullcalendar: FullCalendar;
constructor(private eventService: EventService) {}
ngOnInit() {
this.eventService.getEvents().then(events => { this.events = events;});
this.options = {
plugins:[ dayGridPlugin, timeGridPlugin, interactionPlugin, listPlugin ],
defaultDate: '2017-02-01',
header: {
left: 'prev,next',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true,
nextDayThreshold: '06:00:00',
//eventColor: '#378006',
dateClick: (dateClickEvent) => { // <-- add the callback here as one of the properties of `options`
console.log("DATE CLICKED !!!");
},
eventClick: (eventClickEvent) => {
console.log("EVENT CLICKED !!!");
},
eventDragStop: (eventDragStopEvent) => {
console.log("EVENT DRAG STOP !!!");
},
eventReceive: (eventReceiveEvent) => {
console.log(eventReceiveEvent);
eventReceiveEvent.event.setAllDay(false, {maintainDuration: true});
eventReceiveEvent.eventColor = '#378006';
eventReceiveEvent.event.eventColor = '#378006';
eventReceiveEvent.event.css('background-color', '#378006');
this.eventService.addEvent(eventReceiveEvent);
}
};
}
}
我发现添加此选项eventColor: '#378006',我可以更改默认事件背景颜色...但是这样它是静态的,我无法为不同类型的事件处理不同的颜色(我只是更改默认值所有事件的颜色,所以它不适合我的用例)。
我有这个方法用于修改拖到我的日历中的事件:
eventReceive: (eventReceiveEvent) => {
console.log(eventReceiveEvent);
eventReceiveEvent.event.setAllDay(false, {maintainDuration: true});
eventReceiveEvent.eventColor = '#378006';
eventReceiveEvent.event.eventColor = '#378006';
eventReceiveEvent.event.css('background-color', '#378006');
this.eventService.addEvent(eventReceiveEvent);
}
我在想它可能是放置这种行为的一个很好的候选位置......正如你在我的代码中看到的那样,我尝试使用某种方法来设置事件颜色,但它不起作用......我仍然获得呈现我的页面时的默认事件颜色。
为什么?怎么了?我错过了什么?如何获得所需的行为并通过代码设置事件颜色?