Angular UI Calendar is not rendering after refreshing the screen - angularjs

I am using angular ui calendar to render events, when the page loads application is rendering the calendar properly.
But when I refresh the screen, events block is not rendering.
I am using the following code to render the calendar in UI.
Following is my code block.
function returnCalendarConfig() {
return {
calendar: {
height: 500,
editable: false,
displayEventTime: true,
selectable: true,
timeFormat: 'hh:mm A',
stick: true,
defaultView: 'month',
columnFormat: 'dddd',
disableDragging: false,
header: { left: 'month,agendaWeek,agendaDay', center: 'title', right: 'prev,next' },
eventClick: $scope.onEventClick,
dayClick: $scope.onDayClick,
eventRender: $scope.onEventRender
}
};
}
$scope.uiConfig = returnCalendarConfig();
function getCalendarEvents() {
var user = commonService.getUser();
console.log('User Object', user);
$scope.events = [];
$timeout(function () {
applyScope();
});
commonService.hideProcessingForSiteDetails(200);
}
getCalendarEvents()
getCalendarEvents method calls at end of the controller.
<div class="calendar" data-ng-model="eventSources" calendar="myCalendar" ui-calendar="uiConfig.calendar">
</div>

Related

How to fix 'Mobile devices doesn't populate json events'

For some reason calendar doesn't populate json events on mobile devices.
I tried this page using Chrome and Safari for iPhone 7 but it doesn't work properly.
countExtra = 0;
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
header: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
},
defaultDate: '<?=date("Y-m-d")?>',
editable: false,
navLinks: true, // can click day/week names to navigate views
eventLimit: true, // allow "more" link when too many events
events: {
url: '/wp-content/themes/bridge-child/calendar/routines.php?categories=<?=$_GET["categories"]?>&q=<?=$_GET["q"]?>',
failure: function() {
jQuery("#errorMessage").css("display", "block");
}
},
loading: function(bool) {
document.getElementById('loading').style.display = bool ? 'block' : 'none';
}
});
calendar.render();
});
```javascript
I don't see any error messages.
SOLUTION:
For some reason Safari is conflicting with the date format so I had to change 2019-01-01 10:00:00 to 2019-01-01T10:00:00
Just add a T between the date and time.
After that, Safari and all mobile browsers started working :)

Custom Business Logic in today button of fullcalendar

I am using Angular JS and FullCalendar control for one of my requirement.
My code for full calendar in Angular JS is as below:-
<div ui-calendar="uiConfig.calendar" ng-model="eventSources" id="calendar"></div>
$scope.uiConfig = {
calendar: {
editable: true,
header: {
left: 'title',
center: '',
//right: 'today prev,next'
right: 'today next'
},
aspectRatio: 1.25,
selectable: true,
events: $scope.eventsselection,
dayClick: $scope.dayClick,
validRange: function (nowDate) {
return {
start: nowDate.clone().subtract(1, 'days'),
};
}
}
};
I want to add my custom business logic when user clicks on "today" button at top right. How to achieve this?
You can define a customButton with the text 'Today'
customButtons: {
myTodayButton: {
text: 'Today',
click: function() {
/* Add custom logic here */
$('#calendar').fullCalendar('today'); //will change calendar to today
}
}
},
In order to be able to see this button you must add it to the header option instead of the today option
header: {
left: 'title',
center: '',
right: 'myTodayButton next'
},

How to add HTML elements to AngularUI calendar

I/m working with AngularUI calendar.My task is add some data to Calendar cells with CSS Styles.
I haven't any idea about that,beacause I'm new to AngularJS.
Please help me.
Thanks.
My Angular Code
$scope.uiConfig = {
calendar: {
height: 500,
editable: true,
header: {
left: '',
center: 'title',
right: 'prev next'
},
defaultView: 'month'
}
};
Try this kind of effort with dayRender function. You can add html elements to your calendar using cell.html
With my answer all cells fill with same styles and other HTML Elements.Then you can customize it with your back-end array.
Try this
$scope.uiConfig = {
calendar: {
height: 500,
editable: true,
header: {
left: '',
center: 'title',
right: 'prev next'
},
defaultView: 'month',
dayRender: function (date, cell) {
$r = $scope.getDateInfo(date);
if($r){
cell.css("background-color", "#e6f7ff");
}
cell.html('<b>'+$r.amount+'</b>');
}
}
};
$scope.getDateInfo = function(date){
return {
amount : 50000
}
}
You can add in-line styles or classes to HTML elements.
In this I used another function.Please refer my code and any further matter simply leave a comment.
fiddle
Cheers!!

How to control click of event in fullcalendar?

I am developing in cordova angularjs.
I used this tutorial to integrate a full calendar in my project
My goal is: i want that when I click an event in my fullcalendar a popup is displayed.
my controller:
facebookExample.controller("evenementCalendarController", function($scope, $cordovaOauth, $localStorage, $location,$ionicPopup,$state,$http,$cordovaCalendar,uiCalendarConfig) {
$http.get('http://127.0.0.1:8080/elodieService/evenements/'+$localStorage.idInfoEvent+'/l', { params: {fields: "titre_annonce,date_evenement",format:"json"} }).then(function(result) {
var d= new Date(result.data.date_evenement);
$scope.alertOnEventClick = function( date,allDay,jsEvent, view) {
$scope.alertMessage = (' was clicked ');
};
$scope.uiConfig = {
calendar:{
height: 450,
editable: true,
lang: 'fr',
dayClick: $scope.alertOnEventClick,
eventDrop: $scope.alertOnDrop,
eventResize: $scope.alertOnResize,
events: [
{
title: title,
start: d,
allDay: true,
//rendering: 'background',
backgroundColor: '#00CED1',
}
],
color: 'red', // an option!
textColor: 'black',
calendar:{
lang: 'fr'
}
}
};
});
});
I get the following error:
!JavaScript ERROR: 'undefined' is not an object (evaluating 'array.length')
http://localhost:36994/lib/angular-ui-calendar/src/calendar.js:98
!JavaScript ERROR: 'undefined' is not an object (evaluating 'sources.length')
http://localhost:36994/lib/angular-ui-calendar/src/calendar.js:63
And my popup won't display. How can I solve this?
Try removing the comma after the last event option:
backgroundColor: '#00CED1',
This is the last property for that event object, so it should not be followed by a comma.

How to use angular-ui/ui-calendar (arshaw/fullcalendar) loading call back?

I'm trying to implement the loading callback function using the angular-ui calendar. I want my calendar to go to a specific date once it is loaded instead of going to the current date.
I can get this functionality using the dayClick method, however I have not been able to implement the loading function using angular at all. Below is the code, note that the loading callback is not console logging anything.
$scope.goToRootScopeDate = function() {
$scope.myCalendar.fullCalendar('gotoDate', $rootScope.day);
}
/* config calendar view */
$scope.uiConfig = {
calendar: {
defaultView: "agendaDay",
// editable: true,
header: {
left: 'agendaWeek',
center: 'title',
right: 'today prev,next',
},
dayClick: $scope.goToRootScopeDate,
loading: function(bool) {
if (bool) {
console.log('Done loading')
} else {
console.log("still loading")
}
}
},
};
If you want to manage the Loading callback method from the ng-controller...
Loading callback receives two parameters, not a boolean.
/* config calendar view */
$scope.uiConfig = {
calendar: {
defaultView: "agendaDay",
// editable: true,
header: {
left: 'agendaWeek',
center: 'title',
right: 'today prev,next',
},
dayClick: $scope.goToRootScopeDate,
loading: $scope.loading
},
};
And then you manage it in the controller with those 2 parameters
$scope.loading = function(isLoading, view){
alert("is loading" + isLoading);
}
You can reproduce it at this plunker where I added some annoying alerts to manage the loading callback.
But, if you only want to load a specific date at the first screen...
Just set the defaultdate in the config:
/* config calendar view */
$scope.uiConfig = {
calendar: {
defaultView: "agendaDay",
// editable: true,
header: {
left: 'agendaWeek',
center: 'title',
right: 'today prev,next',
},
dayClick: $scope.goToRootScopeDate,
defaultDate:$scope.myDesiredDate
},
};

Resources