fullCalendar 可拖动副本(angular)

fullCalendar draggable duplicates (angular)

提问人:Kza 提问时间:10/24/2023 最后编辑:ADysonKza 更新时间:10/31/2023 访问量:33

问:

我使用 fullCalendar 创建了一个日历,可以在其中将一个或多个可拖动事件拖到我的日历中。

现在,当我添加一个事件并在日历中移动它时,它会被复制。

我不希望在日历中移动事件时事件数量增加。

enter image description here

private initializeCalendar() {
     
      const calendarOptions: CalendarOptions = {
        timeZone: 'UTC',
        plugins: [resourceTimeGridPlugin, resourceTimelinePlugin, interactionPlugin],
        initialView: 'resourceTimeGridFiveDay',
        eventResizableFromStart: true,
        droppable: true,
        editable: true,
        eventContent: this.renderEventContent,
        eventClick: this.handleEventClick.bind(this),
        drop: (info: any) => {
          console.log("Drop function called");

          // Check if the event is external
          if (info.draggedEl && info.draggedEl.external) {
            const title = info.draggedEl.innerText;
            const start = info.date;

            // Calculate the end time by adding the defaultEventDurationMinutes
            const end = new Date(start);
            end.setMinutes(start.getMinutes() + this.defaultEventDurationMinutes);

            // Check if the event already exists
            const existingEvent = this.calendarInstance?.getEvents().find(e =>
              e.title === title &&
              +e.start! == +start &&
              e.extendedProps['resourceId'] === info.resource?.id  // Use index signature here
            );

            // Add the event to the calendar if it doesn't already exist
            if (!existingEvent) {
              const eventData = {
                title,
                start,
                end,
                resourceId: info.resource?.id,
                extendedProps: {
                  eventResizableFromStart: true,
                  external: true  // Indicate that this event is external
                },
              };

              if (this.calendarInstance) {
                this.calendarInstance.addEvent(eventData);
              }

              // Optionally, remove the external event from the list
              info.draggedEl.parentNode?.removeChild(info.draggedEl);
              info.event.setExtendedProp('external', false);
            }
          }
        },

    // Initialize and render the calendar
    this.calendarInstance = new Calendar(this.calendarElement.nativeElement, calendarOptions);
    this.calendarInstance.render();
    this.updateDayButtonText();
    }
JavaScript 完整日历 -6

评论

0赞 ADyson 10/31/2023
我们似乎没有关于您的问题的最小可重现示例可供处理。根据目前提供的信息,我看不出你说什么的任何理由。但话又说回来,我没有足够的信息来制作一个可运行的演示,看看我是否可以重现这个问题。另请参阅如何提问。您可以编辑您的帖子。
0赞 ADyson 10/31/2023
我能得到的最接近的是这个演示,正如你所看到的,它基于相当多的猜测,并且还必须修复你提供的代码中的一些语法错误,并且仍然存在一些差距。无论如何,它不会重现问题。也许你可以分叉它并制作一个版本,这样我们就可以看到你的代码中发生了什么?如果有问题,它似乎出在您尚未向我们展示的代码的某个方面。

答: 暂无答案