Angular ui-calendar => 如何使用gotoDate?

Angular ui-calendar => How to use gotoDate?

我想要的是,当我打开日程安排页面时,日历必须根据我提供的日期显示日期,并且视图必须是月视图。所以我使用 fullcalendar 的 gotoDate 函数找到了一个解决方案。但是问题是好像不行。

这是我的代码:

控制器

if($stateParams.displayedDate != '') {
    $('#calendar').fullCalendar('gotoDate', $stateParams.displayedDate);
}

查看

<div id="calendar" ui-calendar="calendarConfig" ng-model="eventSources"></div>

嗯,上面的代码不起作用,所以我尝试了另一种方法。我更改了控制器中的一些代码

if($stateParams.displayedDate != '') {
    $scope.calendar.fullCalendar('gotoDate', $stateParams.displayedDate);
}

但是出现了一个错误 "calling a function from undefined object ...... etc ..."

我正在使用,angularJS 1.2,angular ui-calendar 1.0,fullcalendar 2.3.1

注意: 我以这种格式为 $stateParams 提供日期 "YYYY-MM-DD" 例如。 2015-02-15

编辑更新

我似乎无法访问日历对象。所以按照文档 https://github.com/angular-ui/ui-calendar#accessing-the-calendar-object 我把我的代码结束到这个

控制器

$scope.uiCalendarConfig = {
    calendar: {
        height: 720,
        editable: true,
        forceEventDuration: true,
        header:{
            left: 'title',
            center: '',
            right: 'prevYear prev today next nextYear'
        },
        viewRender: currentCalendarDisplayInfo,
        eventDrop: $scope.saveTrainingSchedule,
        eventResize: $scope.saveTrainingSchedule
    }
};

if($stateParams.displayedDate != '') {
    $scope.uiCalendarConfig.calendars.myCalendar.fullCalendar('gotoDate', $stateParams.displayedDate);
// console.log($scope.myCalendar); -> returns undefined
// console.log($scope.uiCalendarConfig); -> there is no "calendars" object
}

查看

<div ui-calendar="uiCalendarConfig.calendar" ng-model="eventSources" calendar="myCalendar"></div>

但是还是不行。有人可以给我一个逐步的过程吗?我真的听不懂文档在说什么。

我尝试 console.log($scope.myCalendar); 但它未定义然后尝试 console.log($ scope.uiCalendarConfig.calendar); 并且其中没有 calendars 对象。

更新 2

我快到了。所以我只需要在我的控制器中注入 uiCalendarConfig 然后它就会可用但我仍然遇到问题。 console.log(uiCalendarConfig.calendars); returns 一个空对象。

控制器

var controllers = {};

controllers.trainingScheduleController = function($scope, $rootScope, $state, $stateParams, $http, uiCalendarConfig, utilityFunctions) {

    if($stateParams.displayedDate != '') {
        console.log(uiCalendarConfig.calendars); // returns Object{}
        uiCalendarConfig.calendars.myCalendar.fullCalendar('gotoDate', $stateParams.displayedDate); // error -> calling function from undefined
    }



    $scope.calendarConfig = {
        height: 720,
        editable: true,
        forceEventDuration: true,
        header:{
            left: 'title',
            center: '',
            right: 'prevYear prev today next nextYear'
        },
        viewRender: currentCalendarDisplayInfo,
        eventDrop: $scope.saveTrainingSchedule,
        eventResize: $scope.saveTrainingSchedule
    };


};

manageTrainingsModule.controller(controllers);

查看

<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="myCalendar"></div>

为什么不在 fullCalendar config

中使用 defaultDate

查看 lib 的源代码似乎无法从视图直接访问实例,因此您必须做两件事:

  • 在你的控制器中注入 "uiCalendarConfig"。该变量将是一个具有 "calendars" 属性的对象。在此属性中,还有另一个带有日历实例的对象。您的实例的名称由视图中的一个属性决定,"calendar".

  • 在视图中添加属性 "calendar" 以命名您的实例。

所以,如果您有这样的代码:

<div ui-calendar="calendarConfig" calendar="myCalendar"/>

在控制器中,日历实例将是:

uiCalendarConfig.calendars.myCalendar;

在源代码中查看更多内容:

https://github.com/angular-ui/ui-calendar/blob/master/src/calendar.js

更新:

你误会了。根据您的更新,您将保持现在的 HTML,但在控制器中您要这样做:

function TheController($scope, uiCalendarConfig) {
  $scope.calendarConfig = {
    height: ...
  };

  console.log(uiCalendarConfig);
}

尝试改变

uiCalendarConfig.calendars.myCalendar.fullCalendar('gotoDate', $stateParams.displayedDate);

uiCalendarConfig.calendars['myCalendar'].fullCalendar('gotoDate', $stateParams.displayedDate);

这解决了我的问题。