controller.$render = function () { var viewValue = controller.$viewValue; if (viewValue) { var date = moment(viewValue); if (angular.isDefined(date) && date != null && moment.isMoment(date)) { datetimepicker.data('DateTimePicker').date(date); } } else { datetimepicker.data('DateTimePicker').date(setCalendarPickerStartDate()); datetimepicker.data('DateTimePicker').date(); } return controller.$viewValue; };So, I believe that datetimepicker.data('DateTimePicker').date(date); causes the onblur event to fire
scope.$watch('ngModel', function () { validate(); datetimepicker.on('dp.change', updateModel).on('blur', onblur); });I'll try to add a new variable that will tell me what kind of change it was.
scope.$watch('ngModel', function () { validate(); datetimepicker.on('dp.change', updateModel).on('blur', onblur); });I've been tracing and I can see that angular sets the control dirty in that watch check.