【问题标题】:on click of next and previous button FullCalendar comes to the agenda View单击下一个和上一个按钮 FullCalendar 进入议程视图
【发布时间】:2018-07-30 13:08:57
【问题描述】:

我正在尝试使用角度 1 的完整日历,并且我已完成显示事件,

当我尝试在下一个和上一个按钮单击时添加事件时,我也得到了来自服务器的响应,但是当事件被分配给 FullCalendar 事件时,它会返回默认视图或任何议程,例如,如果视图是日视图当我单击上一个按钮时,它会转到前一天,当事件来自服务器时,它会返回到今天的视图。 以下是可以让您清楚了解我在做什么的代码。

HTML

<div id="demoCalender" fc fc-options="calendarOptions">

角度

$scope.defaultViewAgenda = "agendaDay";

$scope.calendarOptions = {
    height: get_calendar_height(100),        
    header: {
        left: 'title',
        center: 'today',
        right: 'prev,agendaDay,agendaWeek,month,next'
    },
    buttonText: {
        today: 'Today',
        month: 'Month',
        week: 'Week',
        day: 'Day',
        list: 'List'
    },
    defaultTimedEventDuration: '00:45:00',
    forceEventDuration: false,        
    defaultView: $scope.defaultViewAgenda,
    firstHour: 09,        
    themeSystem: 'standard',
    windowResize: function (view) {            
        $('#demoCalender').fullCalendar('option', 'height', get_calendar_height(117));
        $('#demoCalender').fullCalendar('rerenderEvents');
    },
    viewRender: function (view) {
        console.log(view);
    },
    events: [],
    viewDisplay: function (element) {
        console.log(element);
    }
};

FullCalendar 选项。并且事件默认为空,当服务器响应来自我下面函数的服务器方法调用时,事件显示在日历中

$scope.getAgendaReschedules = function (agenda, startTime, endTime, isAgendaNextOrPrevious) {
    demoReschedules.getRescheduls($scope.assignedAgentId, "RESCHEDULED", startTime, endTime).then(function (response) {
        if (response.status == 200) {
            if (response.data.length > 0) {
                var groupByScheduledContacts = response.data.reduce(function (result, current) {
                    result[current.scheduled] = result[current.scheduled] || [];
                    result[current.scheduled].push(current);
                    return result;
                }, {});

                $scope.events = [{}];

                for (key in groupByScheduledContacts) {
                    var eventTime = moment(key, "DD/MM/YYYY HH:mm:ss");
                    $scope.events.push({
                        title: 'No. of rescheduled call : ' + groupByScheduledContacts[key].length,
                        start: eventTime,
                        end: eventTime,
                        description: 'This is a cool event',
                        color: $scope.getColorForReschedules(eventTime)
                    });
                }

                $scope.calendarOptions.events = $scope.events;

                if (isAgendaNextOrPrevious == false) {
                    $scope.calendarOptions.defaultView = agenda;
                }                    
            }
            else {
                $scope.calendarOptions.events.push({});
                $scope.calendarOptions.defaultView = agenda;                    
            }
        }            
    }, function err() { });

};  

并单击诸如周、月和日之类的议程按钮,我在上面调用相同的方法,当我对下一个和上一个按钮执行相同操作时,单击它会进入今天的视图。如果议程是一天,或者如果议程视图是周,那么它就是本周,月份也是如此。

下面是下一个和上一个按钮点击的代码。

在此 $scope.tempViewAgenda 是我在日、周或月议程按钮点击时设置的临时变量值。

$('#demoCalender').fullCalendar().on('click', '.fc-prev-button', function () {
    switch ($scope.tempViewAgenda) {
        case "agendaDay":
            //alert("Prev Day");                
            $scope.getPreviousAgendaReschedules('d');
            break;

        case "agendaWeek":
            $scope.getPreviousAgendaReschedules('w');
            //alert("Prev Week");
            break;

        case "month":
            $scope.getPreviousAgendaReschedules('m');
            //alert("Prev Month");
            break;
    }
});

$('#demoCalender').fullCalendar().on('click', '.fc-next-button', function () {
    switch ($scope.tempViewAgenda) {
        case "agendaDay":
            $scope.getNextAgendaReschedules('d');
            break;

        case "agendaWeek":
            $scope.getNextAgendaReschedules('w');
            //alert("Next Week");
            break;

        case "month":
            $scope.getNextAgendaReschedules('m');
            //alert("Next Month");
            break;
    }
});


//previous agenda reschedules
$scope.getPreviousAgendaReschedules = function (agendaStartCharacterToSubtract) {
    $scope.startDate = moment($scope.startDate).subtract(1, agendaStartCharacterToSubtract).format('YYYY-MM-DD HH:mm:ss');
    $scope.endDate = moment($scope.endDate).subtract(1, agendaStartCharacterToSubtract).format('YYYY-MM-DD HH:mm:ss');
    console.log("Previous : start date : " + $scope.startDate + " End date : " + $scope.endDate);
    $scope.getAgendaReschedules($scope.tempViewAgenda, $scope.startDate, $scope.endDate, true);
};

//next agenda reschedules
$scope.getNextAgendaReschedules = function (agendaStartCharacterToAdd) {
    $scope.startDate = moment($scope.startDate).add(1, agendaStartCharacterToAdd).format('YYYY-MM-DD HH:mm:ss');
    $scope.endDate = moment($scope.endDate).add(1, agendaStartCharacterToAdd).format('YYYY-MM-DD HH:mm:ss');
    console.log("Next : start date : " + $scope.startDate + " End date : " + $scope.endDate);
    $scope.getAgendaReschedules($scope.tempViewAgenda, $scope.startDate, $scope.endDate, true);
};

这里有没有人来解决这个问题?

【问题讨论】:

    标签: javascript angularjs fullcalendar fullcalendar-3


    【解决方案1】:

    我得到了这个问题的答案,每当我要分配事件时,它都会重新初始化,所以我需要设置默认日期和议程视图以显示提取的事件,例如

    $scope.getAgendaReschedules = function (agenda, startTime, endTime, isAgendaNextOrPrevious) {
        demoReschedules.getRescheduls($scope.assignedAgentId, "RESCHEDULED", startTime, endTime).then(function (response) {
            if (response.status == 200) {
                if (response.data.length > 0) {
                    var groupByScheduledContacts = response.data.reduce(function (result, current) {
                        result[current.scheduled] = result[current.scheduled] || [];
                        result[current.scheduled].push(current);
                        return result;
                    }, {});
    
                    $scope.events = [{}];
    
                    for (key in groupByScheduledContacts) {
                        var eventTime = moment(key, "DD/MM/YYYY HH:mm:ss");
                        $scope.events.push({
                            title: 'No. of rescheduled call : ' + groupByScheduledContacts[key].length,
                            start: eventTime,
                            end: eventTime,
                            description: 'This is a cool event',
                            color: $scope.getColorForReschedules(eventTime)
                        });
                    }
    
                    $scope.calendarOptions.events = $scope.events;
    
                    if (isAgendaNextOrPrevious) {
                        $scope.calendarOptions.defaultDate = moment(startTime);
                        $scope.calendarOptions.defaultView = agenda;
                    }
                    else {
                        $scope.calendarOptions.defaultDate = moment(startTime);
                        $scope.calendarOptions.defaultView = agenda;
                    }
                }
                else {
                    $scope.calendarOptions.events.push({});                    
                    $scope.calendarOptions.defaultDate = moment(startTime);
                    $scope.calendarOptions.defaultView = agenda;
                }
            }            
        }, function err() { });
    
    };  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      相关资源
      最近更新 更多