You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中FullCalendar重复事件多属性设置仅最后一项生效求助

解决FullCalendar重复事件在eventDidMount中多属性设置失效的问题

问题原因

调用event.setProp()修改属性时,每次调用都会触发FullCalendar的重绘逻辑。对于rrule生成的重复事件,多次重绘会导致之前设置的属性被覆盖,最终只有最后一次setProp()生效。

解决方案:直接操作事件DOM元素

在eventDidMount回调中,直接修改挂载的DOM元素样式,跳过FullCalendar的事件属性更新逻辑,避免重绘冲突。这种方式既可以获取到rrule展开后的实际start日期,又能一次性设置所有样式属性。

修改后的代码示例

onEventMounted(mountArg: EventMountArg) {
  const event = mountArg.event;
  const eventEl = mountArg.el;

  if (event.extendedProps['type'] === 'break_event') {
    // 直接操作DOM元素设置样式
    eventEl.style.backgroundColor = '#FDDD9F';
    eventEl.style.borderColor = '#202020';
    eventEl.style.color = '#202020';

    // 若需要根据展开后的start日期做额外逻辑,直接用event.start即可
    // 示例:如果是周末,调整透明度
    const dayOfWeek = event.start.getDay();
    if (dayOfWeek === 0 || dayOfWeek === 6) {
      eventEl.style.opacity = '0.8';
    }
  }
}

补充说明

  • 这种方式不会触发FullCalendar的事件重绘,所有样式设置都会保留,无论点击导航按钮还是后端加载数据都不会失效。
  • 如果需要修改更多样式(比如hover状态),可以通过添加自定义CSS类来实现:
// 在onEventMounted中添加类名
eventEl.classList.add('break-event');
/* 组件CSS文件中定义样式 */
.break-event {
  background-color: #FDDD9F !important;
  border-color: #202020 !important;
  color: #202020 !important;
}
.break-event:hover {
  opacity: 0.9 !important;
}

添加!important是为了覆盖FullCalendar的默认样式优先级。

内容的提问来源于stack exchange,提问作者Sidharth Bajpai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:43:12