7

Я использую jquery полный календарь с угловым и угловым ремешком. Проблема заключается в том, что календарь будет отображаться только при нажатии на одну из кнопок в календаре или изменении размера окна браузера. Этот календарь загружается в модальное поле, инициализированное с помощью углового ретранслятора.fullcalendar не отображается, пока нажимается кнопка или не изменяется размер окна?

Я ценю помощь.

Plunkr здесь: LINK

Модальные HTML в контроллере search_modal.html календарь: calendarCtrl.js контроллер Родитель search.js

Edit: После того, как испытывают те же проблемы с картами Google и галерея I «Я попытался реализовать, я не думаю, что это проблема, связанная напрямую с календарем, а скорее связанная с самой модальной коробкой. Все, что интерактивно и включает javascript, не масштабируется должным образом в соответствии с размером модального окна. У кого-нибудь есть идеи о том, как это исправить?

+0

см ссылку: http://stackoverflow.com/questions/16533412/using-fullcalendar-methods-with-angularui-wrapper –

ответ

4

Ваша проблема, кажется, похож на How can I list two Linkedin Follow Buttons in a Twitter Bootstrap Dropdown

Ваш модальный устанавливается:

<a data-bs-modal="'search_modal.html'" href="#" class="ng-scope" data-target="#search_modal-003" data-toggle="modal">Search</a> 
<div id="search_modal-003" class="modal hide fade ng-scope in" tabindex="-1" aria-hidden="false"> 

Снятие дисплея: нет (указать место) перед календарной вставкой будет решить вашу проблему. С кодом выше b.e. добавьте #search_modal-003 {display:block; } в свой собственный css.

+0

Я не совсем понимаю ваше решение. Пожалуйста, дублируйте мой plunkr, чтобы показать, что решение работает. – Malcr001

+0

смотри: http://plnkr.co/9ENqEi3MrH7psrthtLKx –

+0

Хотя это работает в модальном ящике, у меня есть действие слайд-шоу jquery slideUp на других страницах, где календар существует и скрытно скрыт. Кажется, что календарь должен быть видимым по какой-либо причине, чтобы он был правильно отображен на странице? – Malcr001

4

Проблема в том, что календарь инициализируется, пока модальный вид не отображается. Если модаль был в контроллере, вы могли бы использовать $scope.$on('modal-shown', function() {});, чтобы каким-то образом запустить calendar('render');.

Я не мог определить способ обнаружения видимости. Я попробовал использовать $ watch в директиве на elm.is(':visible'), но мог только проверить его 2 раза, когда он загружен.

+0

Спасибо за ваши усилия. Я буду царапать себе голову, пытаясь заставить что-то работать. – Malcr001

+0

Я нашел такую ​​же проблему в вашем коде, как упоминал @skeemer. Вам нужно дважды щелкнуть ссылку до того, как модальный откроется (сначала нажмите на загрузку и не покажу) –

1

Я создал пользовательскую директиву и завод, чтобы контролировать, когда показывать и скрывать календарь. Когда calendarFactory.isVisible установлено на true, вы вызываете функцию визуализации fullCalendar.

restrict: 'A', 
    scope: true, 
    link: function (scope, element, attrs) { 
     scope.$watch(function (scope) { 
      return calendarFactory.isVisible; 
     }, function (newValue, oldValue) { 
      if(newValue === true) 
       $(element).fullCalendar('render'); 

Фрагмент кода переделан с производства и не может быть совершенно правильным, но идея. Вы должны использовать $scope.$emit и $scope.$on вместо $watch кстати.

Решение №2 будет ui-calandar Я использую его сейчас для нашего собственного проекта, и это может быть приятно для быстрого взаимодействия, но я бы предложил вашу собственную настраиваемую директиву для гибкости. Мы делаем такие вещи, как двойное представление календаря, локализация клиентов, пользовательский выбор фона-цвета, настраиваемый заголовок для навигации по нескольким представлениям. Если вам нужны такие вещи, я предлагаю альтернативу №1. И я действительно не знаю, как писать директивы. Так что не обескураживайте! Самая сложная часть будет получать FullCalendar для динамического отображения.

-2

Используйте функцию setimeout для задержки загрузки календаря, после чего она будет работать.

2

Я столкнулся с той же проблемой с закладкой фундамента. Где мой календарь был во второй вкладке.То, что я сделал, когда пользователь нажимает на вкладку, которую я имитировал «Сегодня», нажимает кнопку setTimeout с минимальной задержкой. Это решает мою проблему

+0

Я использую Angular и Bootstrap, и это было единственное, что, наконец, сработало для меня. Я также должен был использовать провайдер '$ timeout', чтобы убедиться, что' $ ('. Fc-today-button'). Click() 'был вызван после цикла дайджеста, иначе казалось, что состояние гонки с Угловой дайджест делает вещи видимыми: https://docs.angularjs.org/api/ng/service/$timeout –

5

Просто добавьте еще один ответ на этот вопрос. Я использовал fullcalendar на вкладке начальной загрузки. Для того, чтобы сделать календарь, я добавил:

$('a#id-of-tab').on('shown.bs.tab', function (e) { 
    $("#the-calendar-container").fullCalendar('render'); 
}); 
Смежные вопросы