fullcalendar 2.7.3与AngularJS 1.6.9中businessHours显示异常求助
看起来你遇到的问题是明明只配置了周一和周二的营业时间,但日历却默认显示了周一到周五——这在FullCalendar 2.x版本里通常是配置格式不正确或者默认值未被正确覆盖导致的,我给你梳理几个排查和解决方向:
1. 确认businessHours的配置格式完全符合FullCalendar 2.7.3要求
FullCalendar 2.x中,如果你想指定特定几天的营业时间,必须在每个时间块对象里明确通过daysOfWeek指定天数(注意是0为周日,1为周一,以此类推)。如果省略这个属性,默认会应用到所有工作日(周一到周五),这就是你看到的问题根源。
正确的配置示例(结合AngularJS的ui-calendar指令):
$scope.calendarConfig = { calendar: { businessHours: [ { daysOfWeek: [1], // 周一 start: '09:00', end: '17:00' }, { daysOfWeek: [2], // 周二 start: '09:00', end: '17:00' } ], defaultView: 'agendaWeek', // 其他日历配置项 editable: false, header: { left: 'prev,next today', center: 'title', right: 'agendaWeek,agendaDay' } } };
2. 检查是否有默认配置或其他代码覆盖了你的设置
如果你用的是AngularJS的ui-calendar插件,要确保你的businessHours配置是直接写在日历的核心配置里,而不是被其他全局默认配置覆盖。比如有些项目会在全局配置里预设businessHours为周一到周五,你需要明确覆盖这个值。
可以在控制台打印当前日历的实际配置,验证是否生效:
// 假设你的日历元素id是calendar console.log($('#calendar').fullCalendar('option', 'businessHours'));
如果输出的不是你配置的数组,说明有其他代码修改了这个配置。
3. 注意版本特有的属性差异
FullCalendar 2.x版本里,指定天数的属性是daysOfWeek,而更早的版本可能用days。如果你之前参考的是旧版文档,误用了days属性,也会导致配置不生效,默认应用到所有工作日。
4. 排除样式干扰
有时候看起来显示了周一到周五的营业时间,可能是CSS样式的问题——比如其他样式给所有工作日添加了背景色,和businessHours的样式混淆了。可以检查浏览器的元素面板,看看对应日期的DOM是否真的被标记为businessHours。
按上面的步骤排查,应该就能解决你的问题了。
内容的提问来源于stack exchange,提问作者swordfish

