AngularJS和Fullcalendar: eventClick只在第一次工作

AngularJS and Fullcalendar: eventClick works only first time

本文关键字:第一次 工作 eventClick Fullcalendar AngularJS      更新时间:2023-09-26

我使用的是基于fullcalendar: https://github.com/angular-ui/ui-calendar的Angular模块以及来自ng-bootstrap的dialog模块。我将日历配置为在eventClick操作上显示用于编辑事件的对话框。它只能正常工作一次。在关闭第一个对话框并再次点击任何事件后,新对话框不会显示。但是当我点击页面上的任何其他链接时,所有想要的对话框都一个接一个地显示出来,就像它们在某处排队一样。

这是来自我的控制器的片段:

 $scope.showEditVisitDialog = function (event) {
    var editVisitDialogOpts = {
        backdropClick: false,
        templateUrl: 'views/addEditVisitDialog.html',
        controller: 'AddEditVisitDialogController',
        resolve: {
            patientId: function () {
                return event.patientId;
            },
            visitId: function () {
                return event.id;
            }
        }
    };
    var editVisitDialog = $dialog.dialog(editVisitDialogOpts);
    editVisitDialog.open().then(function (updatedVisit) {
    //some action
    });
};

$scope.calendar = {
    height: 450,
    editable: true,
    header: {
        left: 'month agendaWeek ',
        center: 'title',
        right: 'today prev,next'
    },
    eventClick: $scope.showEditVisitDialog
};
$scope.events = [];
$scope.eventSources = [$scope.events]

事件稍后在控制器中从REST获取。

在html

:<div ui-calendar="calendar" config="calendar" ng-model="eventSources"/>

控制台没有错误,我做错了什么?

活塞代码:http://plnkr.co/edit/89sQfsU85zN4uxauFI2Y?p=preview

像往常一样,当有一个fiddle/plnkr可用时,事情会更简单、更明显。您需要将对showEditVisitDialog的调用放在$apply函数中:

...
$scope.calendar = {
  editable: true,
  eventClick: function(){
    $scope.$apply(function(){
      $scope.showEditVisitDialog()
    });
  }
};
...

plnkr工作。

你需要在uiConfig for calendar之前声明你的函数;)