angular - 如何在 fullcalendar v5 事件 URL 上添加 JWT 标头
问题描述
我正在尝试让 fullcalendar 与我的 API 一起工作,这需要通过令牌进行身份验证,但我对 Angular 或 Typescript 的了解不足以弄清楚我需要做什么来完成我已经拥有的,所以我目前的实现是不完整的. 我只是不知道我需要做什么才能完成它。
在旧版本中,您可以通过 eventSources 添加标头,但至少在 fullcalendar v5 中,这不再有效。据我了解,我需要传递一个函数来events
拦截调用并使用令牌修改标头。我有一个用于 HttpClient 的可注入程序,它会自动将令牌添加到 HttpClient 调用的标头中,但我不确定event
函数期望返回的参数是什么,或者如何将响应转换为被它识别。
我的 events.service.ts 中有这个:
public getEvents(start: string, end: string){
let params = new HttpParams().set("start", start).set("end", end)
return this.httpClient.get<EventModel[]>(environment.scheduleUrl + 'api/events/', {params: params});
}
这是通过我现在保留在组件中的方法调用的:
handleGetEvents(info) {
let response = this.eventsService.getEvents(info.startStr, info.endStr);
console.log(response);
return response;
}
参数用这个events
调用最后一个方法:
events: this.handleGetEvents.bind(this),
这确实从服务器检索事件,并且我可以在控制台中看到它们,但与我删除身份验证检查并仅使用 url 时不同events: environment.scheduleUrl + 'api/events/,
,它不会将事件填充到日历中。我认为这是因为它没有正确输入,但我不确定,我不确定如何将结果转换为可以识别的类型。
解决方案
如Fullcalendar v5的文档events
中所述,该选项支持可能返回类似 Promise 对象的函数。你已经有一个 Observable 来获取你的事件,你现在需要将它转换为一个 Promise。要将 Observable 转换为 Promise,可以使用该toPromise
方法。
export class AppComponent {
public calendarOptions = {
initialView: 'dayGridMonth',
events: this.fetchEvents.bind(this)
};
constructor(private events: EventsService) {}
public fetchEvents(dateInfo) {
return this.events.get(dateInfo.start, dateInfo.end).toPromise();
}
}
EventsService
由组成:
@Injectable()
export class EventsService {
constructor() {}
/** Return the events for the given span. */
get(start: string, end: string): Observable<any[]> {
return of([]); // Remove this and do the query to your backend service with the JWT header
}
}
See a live demo at https://stackblitz.com/edit/angular-11-new-nciowx?file=src%2Fapp%2Fapp.component.ts
推荐阅读
- laravel - .htaccess 的目录被更改
- mongodb - Mongodb查询返回字段值
- sql-server - 在 SQL 代理作业中由 SSIS 项目 FTP 任务下载时损坏的图像
- android - 我可以使用除我开发的 Android 应用程序以外的任何浏览器限制访问我的网站吗?
- openstreetmap - 如何在一个行政区域内找到所有方法
- python - 使用带有构造函数的 MySQL 连接器
- c - 为什么在 MASM 汇编中使用 FPU x87 指令集执行操作时得到无意义的数字?
- javascript - 不调用 ES6 导入
- wordpress - WordPress 自定义查询字符串未被 Google 索引
- css - HighCharts 组织节点重叠