3 votes

AngularJS et Fullcalendar : eventClick ne fonctionne que la première fois

Je suis en train d'utiliser le module Angular basé sur fullcalendar: https://github.com/angular-ui/ui-calendar avec le module de dialogue de ng-bootstrap. J'ai configuré le calendrier pour afficher un dialogue pour éditer un événement sur l'action eventClick. Cela fonctionne bien une seule fois. Après avoir fermé le premier dialogue et avoir cliqué à nouveau sur n'importe quel événement, le nouveau dialogue ne s'affiche pas. Mais lorsque je clique sur un autre lien sur la page, tous les dialogues désirés s'affichent un par un comme s'ils étaient en file quelque part.

Voici un extrait de mon contrôleur:

 $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]

Les événements sont récupérés ultérieurement depuis REST dans le contrôleur.

Dans le html:

Pas d'erreurs dans la console, qu'est-ce que je fais de mal?

Code sur plunker: http://plnkr.co/edit/89sQfsU85zN4uxauFI2Y?p=preview

4voto

Stewie Points 20312

Comme toujours, les choses sont plus simples et plus évidentes lorsqu'il y a un fiddle/plnkr disponible. Vous devez placer votre appel à showEditVisitDialog à l'intérieur de la fonction $apply :

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

Travaux plnkr.

2voto

fynx Points 75

Vous devez déclarer votre fonction avant uiConfig pour le calendrier ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X