PrimeNG:为什么点击 FullCalendar 日期时不会发出 dateclick 事件?如何处理日历上特定日期的点击?
PrimeNG: Why clicking on a FullCalendar date the dateclick event is not emitted? How can I handle the click on a specific date on my calendar?
我在 Angular 和 PrimeNG 中都是新手,我发现在尝试使用 FullCalendar 时遇到以下困难组件,这个:https://primefaces.org/primeng/showcase/#/fullcalendar
问题是我想在用户点击日历中的特定日期时处理一个事件(参考前面的 link 示例:当用户点击代表一天的方块时日历,我必须执行回调方法)。
所以我知道这个 PrimeNG 组件应该基于 https://fullcalendar.io/
我尝试过这种方式,但它不起作用:
1) 这是我的 fullcalendard.component.html 页面:
完整日历有效!
<div class="content-section implementation">
<p-fullCalendar #calendar (dateClick)="handleDateClick($event)"
[events]="events"
[options]="options">
</p-fullCalendar>
</div>
如你所见,我添加了:
(dateClick)="handleDateClick($event)"
为了在我呈现的日历的特定日期处理日期点击事件。
2) 然后我有这个 Angular 组件的 "backend" 代码,定义到我的 fullcalendar.component.ts 文件中:
import { Component, OnInit } 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 from '@fullcalendar/interaction';
@Component({
selector: 'app-fullcalendar',
templateUrl: './fullcalendar.component.html',
styleUrls: ['./fullcalendar.component.css']
})
export class FullcalendarComponent implements OnInit {
events: any[];
options: any;
header: any;
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
};
}
handleDateClick(dateClickEvent) {
console.log("DATE CLICKED !!!");
}
}
如您所见,我为此组件导入了一些插件,特别是我已经按照官方文档中的说明安装了它,声明如下:
npm install @fullcalendar/interaction --save
然后我创建了 handleDateClick() 方法来处理这个点击日期事件,我将 interactionPlugin 插入到 calendarPlugins 我的组件使用的数组,如此处解释:dateClick not emitted in fullcalendar angular
之前的 links 引用了 PrimeNg 完整日历所基于的 https://fullcalendar.io/docs/angular。
但它不起作用:我的应用程序编译后,日历显示在我的页面中,但在我显示的日历上单击特定日期没有任何反应。
为什么?怎么了?我错过了什么?如何修复我的代码并正确处理此事件?
来自 PrimeNG 全日历 docs:
Callbacks of the FullCalendar are also defined with the options
property.
所以试试下面的方法
选项 1
this.options = {
plugins:[ dayGridPlugin, timeGridPlugin, interactionPlugin, listPlugin ],
defaultDate: '2017-02-01',
header: {
left: 'prev,next',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true,
dateClick: (dateClickEvent) => { // <-- add the callback here as one of the properties of `options`
console.log("DATE CLICKED !!!");
}
};
选项 2
或从回调函数中访问成员变量和函数,将回调函数与参数绑定this
。 (未经测试 - 可能无法按预期工作)
ngOnInit() {
this.options = {
plugins:[ dayGridPlugin, timeGridPlugin, interactionPlugin, listPlugin ],
defaultDate: '2017-02-01',
header: {
left: 'prev,next',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true,
dateClick: this.handleDateClick.bind(this) // <-- bind the callback with argument `this`
};
}
handleDateClick(dateClickEvent) {
console.log("DATE CLICKED !!!");
// access member variables and functions using `this` keyword
}
我在 Angular 和 PrimeNG 中都是新手,我发现在尝试使用 FullCalendar 时遇到以下困难组件,这个:https://primefaces.org/primeng/showcase/#/fullcalendar
问题是我想在用户点击日历中的特定日期时处理一个事件(参考前面的 link 示例:当用户点击代表一天的方块时日历,我必须执行回调方法)。
所以我知道这个 PrimeNG 组件应该基于 https://fullcalendar.io/
我尝试过这种方式,但它不起作用:
1) 这是我的 fullcalendard.component.html 页面:
完整日历有效!
<div class="content-section implementation">
<p-fullCalendar #calendar (dateClick)="handleDateClick($event)"
[events]="events"
[options]="options">
</p-fullCalendar>
</div>
如你所见,我添加了:
(dateClick)="handleDateClick($event)"
为了在我呈现的日历的特定日期处理日期点击事件。
2) 然后我有这个 Angular 组件的 "backend" 代码,定义到我的 fullcalendar.component.ts 文件中:
import { Component, OnInit } 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 from '@fullcalendar/interaction';
@Component({
selector: 'app-fullcalendar',
templateUrl: './fullcalendar.component.html',
styleUrls: ['./fullcalendar.component.css']
})
export class FullcalendarComponent implements OnInit {
events: any[];
options: any;
header: any;
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
};
}
handleDateClick(dateClickEvent) {
console.log("DATE CLICKED !!!");
}
}
如您所见,我为此组件导入了一些插件,特别是我已经按照官方文档中的说明安装了它,声明如下:
npm install @fullcalendar/interaction --save
然后我创建了 handleDateClick() 方法来处理这个点击日期事件,我将 interactionPlugin 插入到 calendarPlugins 我的组件使用的数组,如此处解释:dateClick not emitted in fullcalendar angular
之前的 links 引用了 PrimeNg 完整日历所基于的 https://fullcalendar.io/docs/angular。
但它不起作用:我的应用程序编译后,日历显示在我的页面中,但在我显示的日历上单击特定日期没有任何反应。
为什么?怎么了?我错过了什么?如何修复我的代码并正确处理此事件?
来自 PrimeNG 全日历 docs:
Callbacks of the FullCalendar are also defined with the options property.
所以试试下面的方法
选项 1
this.options = {
plugins:[ dayGridPlugin, timeGridPlugin, interactionPlugin, listPlugin ],
defaultDate: '2017-02-01',
header: {
left: 'prev,next',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true,
dateClick: (dateClickEvent) => { // <-- add the callback here as one of the properties of `options`
console.log("DATE CLICKED !!!");
}
};
选项 2
或从回调函数中访问成员变量和函数,将回调函数与参数绑定this
。 (未经测试 - 可能无法按预期工作)
ngOnInit() {
this.options = {
plugins:[ dayGridPlugin, timeGridPlugin, interactionPlugin, listPlugin ],
defaultDate: '2017-02-01',
header: {
left: 'prev,next',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true,
dateClick: this.handleDateClick.bind(this) // <-- bind the callback with argument `this`
};
}
handleDateClick(dateClickEvent) {
console.log("DATE CLICKED !!!");
// access member variables and functions using `this` keyword
}