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

如何在AngularJS应用中添加多个FullCalendar组件?双日历实现咨询

在AngularJS中实现两个独立的FullCalendar组件

嘿,我来帮你搞定AngularJS里两个FullCalendar组件的实现!首先看你提供的代码,有两个关键问题需要先修正——重复的id和calendar属性值,这会导致组件冲突,没法正常工作。下面是一步步的实现方案:

1. 修正模板中的重复标识问题

首先,你的模板里两个日历的id和calendar属性完全相同,这会让AngularUI Calendar无法区分它们。我们需要给每个日历设置唯一的id和唯一的calendar标识:

<!-- 第一个日历 -->
<div id="calendar1" ui-calendar="uiConfig.calendar1" ng-model="eventSources1" calendar="myCalendar1"></div>

<!-- 第二个日历 -->
<div id="calendar2" ui-calendar="uiConfig.calendar2" ng-model="eventSources2" calendar="myCalendar2"></div>

2. 控制器中配置独立的日历参数与事件源

接下来在AngularJS控制器里,你需要为每个日历配置对应的配置项和事件源。如果两个日历的基础配置(比如视图、按钮等)相同,可以复用配置对象;如果需要不同的行为,就单独定义:

angular.module('myApp', ['ui.calendar'])
.controller('CalendarController', function($scope) {
    // 可选:共用的基础日历配置
    const baseCalendarConfig = {
        height: 450,
        editable: true,
        header: {
            left: 'month agendaWeek agendaDay',
            center: 'title',
            right: 'prev next today'
        }
    };

    // 为两个日历分配配置(可以单独修改某一个的配置)
    $scope.uiConfig = {
        calendar1: angular.copy(baseCalendarConfig),
        calendar2: angular.copy(baseCalendarConfig)
        // 比如给第二个日历加个不同的默认视图:
        // calendar2: {...baseCalendarConfig, defaultView: 'agendaWeek'}
    };

    // 第一个日历的事件源
    $scope.eventSources1 = [
        {
            title: '团队会议',
            start: new Date(),
            end: new Date(new Date().setHours(new Date().getHours()+1))
        }
    ];

    // 第二个日历的事件源(可以和第一个不同,也可以相同)
    $scope.eventSources2 = [
        {
            title: '客户拜访',
            start: new Date(new Date().setDate(new Date().getDate()+1))
        }
    ];

    // 如果你需要操作单个日历实例(比如跳转日期),可以通过对应的scope变量
    // 示例:跳转第一个日历到明天
    // $scope.myCalendar1.fullCalendar('gotoDate', new Date(new Date().setDate(new Date().getDate()+1)));
});

3. 确保依赖资源正确引入

别忘了在页面中引入FullCalendar和AngularUI Calendar的必要资源(顺序很重要):

<!-- FullCalendar CSS -->
<link rel="stylesheet" href="fullcalendar.css">

<!-- Moment.js(FullCalendar依赖) -->
<script src="moment.min.js"></script>
<!-- jQuery(FullCalendar依赖,注意版本兼容) -->
<script src="jquery.min.js"></script>
<!-- FullCalendar JS -->
<script src="fullcalendar.min.js"></script>
<!-- AngularJS -->
<script src="angular.min.js"></script>
<!-- AngularUI Calendar -->
<script src="angular-ui-calendar.js"></script>

关键注意点

  • 唯一标识:每个日历的id和calendar属性值必须唯一,这是AngularUI Calendar区分不同组件的核心。
  • 独立事件源:通过ng-model绑定不同的eventSources数组,可以让两个日历展示不同的事件;如果需要展示相同事件,也可以绑定同一个数组。
  • 单独控制实例:通过calendar属性绑定的$scope.myCalendar1和$scope.myCalendar2,你可以调用FullCalendar的原生方法来单独控制每个日历的行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:16:42