【发布时间】:2019-08-10 03:15:56
【问题描述】:
我有一个数据库,其中包含一个月/期间的所有事件。我使用了 http.get 并获得了 JSON 文件。该文件具有附加数据,必须先对其进行修改或格式化,然后才能将其用作事件。例如:对于事件标题: name +id 。 所以我已经对其进行了相应的格式化并将其作为字符串存储在局部变量中。我正在尝试将此变量分配为事件数据。但这并没有被填充。
我已经尝试使用 Array.to(var) 将字符串转换为 Array。结果还是一样。我还尝试将其存储在 uri 中并传递与事件数据相同的 url: uri。这也未能显示该事件。 阅读有关 addEvent 方法的完整日历文档。但我对 Angular 8 比较陌生,所以不知道如何实现它。
所以,没有错误,但我似乎错过了大局。我会把我正在做的所有事情都说出来。 有一个接口evtdata:
export interface Evtdata {
startRecur?: any,
endRecur?: any,
startTime?: any,
endTime?: any,
title?: any,
daysOfWeek?: any
}
更新的组件:
this.options$ = this.evts.getEventDat().pipe(
map(data => {
for (var i = 0; i < this.data.length; i++) {
this.eventdat[i].startRecur = "\""+data[i].startDate+"\"";
this.eventdat[i].endRecur = "\""+data[i].endDate+"\"";
this.eventdat[i].startTime ="\""+ data[i].startTime+"\"";
this.eventdat[i].endTime = "\""+data[i].endTime+"\"";
this.eventdat[i].title ="\""+ data[i].name + " " + data[i].wwid+" "+data[i].sId+"\"";
this.eventdat[i].daysOfWeek ="\""+ "[" + data[i].workDays + "]"+"\"";
}
return {
businessHours: {
daysOfWeek: [1, 2, 3, 4, 5],
startTime: '00:00',
endTime: '24:00',
},
editable: true,
customButtons: {
},
header: {
left: 'prev,next',
center: 'title',
right: 'dayGridMonth,listView,timeGridWeek,timeGridDay'
},
plugins: [dayGridPlugin, interactionPlugin, listPlugin, bootstrapPlugin, timeGrigPlugin],
events: this.eventdat
}
})
);
日历.html
<full-calendar
*ngIf="options$ | async"
#fullcalendar
themeSystem="bootstrap"
[businessHours]="(options$ | async).businessHours"
[editable]="true"
[events]="(options$ | async).events"
[header]="(options$ | async).header"
[customButtons]="(options$ | async).customButtons"
[plugins]="(options$ | async).plugins"
(addEventSource)="addEventSource($event)"
(eventClick)="eventClick($event)"
(setProp)="setProp($event)"
></full-calendar>
我添加了多个日志来显示数据,数据正在保存并按所需顺序执行。事件仍未填充。
【问题讨论】:
-
这里似乎有很多不必要的代码。首先,如果要添加
.then块,则不需要 async/await。其次,看起来您正在尝试以某种方式以字符串格式编写 JSON……您为什么要尝试将所有内容都作为字符串进行操作?为什么不简单地将它作为一个对象来操作呢?您可以使用JSON.parse()将 JSON 格式的字符串转换为对象。 -
添加了异步部分,因为在从响应中获取数据之前,它正在执行其余的代码,所以我不得不让其余的代码等待。据我了解,我必须将 Array 作为事件源传递。我将许多转换为字符串,因为我需要上述格式。如果有更好的格式化 json 响应的方法,请告诉我
-
要么你放入一个 async/await,此时你不需要一个 .then 块,要么你放一个 .then 块,并且在接收到数据后需要发生的任何事情都会进行在那个然后阻止。最好避免将两者混为一谈。至于其余的……你想做什么真的不是很清楚。请包括您从服务器返回的格式以及需要转换的格式。
-
另外,你为什么使用 toPromise?你是在改造 HttpClient 暴露的 Observable 吗?
-
JSON 响应:` 名称:某物,ID:某物,开始:,结束:,开始时间:,结束时间:` 我试图将其更改为事件可接受的格式:` 标题:包含名称和id 和 starttime,endtime 等等。我现在正在接收数据,但无法在 FullCalendar 中显示数据。数据似乎不是问题
标签: javascript angular typescript fullcalendar-4