2013-05-18 2 views
3

Я использую модуль Angular на основе fullcalendar: https://github.com/angular-ui/ui-calendar вместе с диалоговым модулем из ng-bootstrap. Я настроил календарь, чтобы отобразить диалоговое окно для редактирования события в действии eventClick. Он работает отлично только один раз. После закрытия первого диалога и повторного нажатия на любое событие новый диалог не отображается. Но когда я нажимаю на любую другую ссылку на странице, все нужные диалоги показывают один за другим, как будто они где-то в очереди.AngularJS и Fullcalendar: 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"/>

в консоли ошибок, что я делаю неправильно?

Код на plunker: http://plnkr.co/edit/89sQfsU85zN4uxauFI2Y?p=preview

+0

Я говорю сначала попробовать и посмотреть, если ваш 'функция showEditVisitDialog' вызывается каждый раз при нажатии на календаре. Если это не так, как проблема в событии click календаря. В противном случае проблема может быть решена. – Stewie

+0

@Stewie Проверено уже, функция вызывается. Я попытаюсь удалить решение и проверить, вызвало ли оно проблему (но я думаю, что это вызовет некоторые ошибки, если проблема будет проблемой). Что вы подразумеваете под: «Если это не так, как проблема в событии click для календаря»? – Kacper

+0

Я имел в виду, что если 'ShowEditVisitDialog' не вызывается каждый раз, когда вы нажимаете на календарь, это может быть календарь, который« ставит в очередь »события (но кажется, что вы уже проверили это). Это может помочь, если вы можете воспроизвести свою проблему в jsfiddle/plnkr/jsbin. Кроме того, попробуйте подключить AddEditVisitDialogController к сообщению. Может быть, там что-то скрывается. – Stewie

ответ

4

Как всегда, все проще и более очевидные, когда есть скрипка/plnkr доступно. Вам нужно разместить вызов showEditVisitDialog внутри $ применять функцию:

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

Working plnkr.

+0

Спасибо, это сработало ;-). Я не уверен, что такое $ scope. $ Apply, но я об этом прочитаю позже. – Kacper

+0

Был такой же вопрос! спасибо за помощь – yakxxx

+0

это также работает с модным сервисом углового ремешка. Как это работает? – wakandan

2

вам нужно объявить, что вы fnction перед тем uiConfig для календаря;)

Смежные вопросы