唯一可行的方法是通过ViewChild调用。其中的两个关键部分是
this.calendar.fullCalendar('removeEvents');
和
this.calendar.fullCalendar('addEventSource', events);
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit{
calendarOptions:Object = {
editable: true,
eventLimit: false,
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay,listMonth'
},
events: [],
eventClick: (calEvent, jsEvent, view) => {
this.openDialog(calEvent);
}
};
displayEvent: any;
@ViewChild(CalendarComponent) ucCalendar: CalendarComponent;
name: string;
subjectFilter: string;
allData$: Observable<EventSchema[]>;
constructor(private subjectEventsService: SubjectEventsService, private dialog: MatDialog) { }
ngOnInit(){
this.subjectEventsService.subscribeToDataServiceGetSubjectEvents().subscribe(data=>{
this.ucCalendar.fullCalendar('removeEvents');
this.ucCalendar.fullCalendar('addEventSource', data);
});
}
}
}
我的测试项目(为了保持清醒)
export class CalComponent implements OnInit {
@ViewChild('calendar') calendar;
_events = new BehaviorSubject<Event[]>(EVENTS);
events$ = this._events.asObservable();
constructor(private http:HttpClient) { }
ngOnInit() {
}
onCalendarInit(e:boolean) {
if(e) {
this.events$.subscribe((events) => {
this.calendar.fullCalendar('removeEvents');
this.calendar.fullCalendar('addEventSource', events);
});
}
}
count:number = 1;
nextEvent() {
this.count++;
EVENTS.push({id: 10 + this.count, title: "Hello!", start: `2018-08-${this.count}`});
this._events.next(EVENTS);
}
calendarOptions:Object = {
height: '600px',
fixedWeekCount : false,
defaultDate: '2016-09-12',
editable: true,
eventLimit: true,
events: []
};
}
interface Event {
id?:number;
title:string;
start:string;
end?:string;
}
Html格式
<button (click)="nextEvent()">Click for next event</button>
<angular2-fullcalendar #calendar [options]="calendarOptions" (initialized)="onCalendarInit($event)"></angular2-fullcalendar>
More Info