Я использую datetimepicker и dateTimeInput в моем приложении;
//my input
<input data-ng-model="order.startDate" data-date-time-input="DD/MM/YYYY hh:mm" data-date-formats="['DD/MM/YYYY hh:mm', 'D/M/YYYY', 'D/M/YYYY h:mm', 'D/M/YYYY h.mm']" type="text" class="field start-field font-l inline numeric" ng-focus="datetime.order.start = true" />
//my datetimepicker
<datetimepicker id="datetime-order" data-on-set-time="datetime.order.start=false" data-ng-model="order.startDate" data-datetimepicker-config="{ minView: 'hour'}"></datetimepicker>
Ввод и средство выбора даты и времени связаны вместе моделью data-ng, поэтому, когда я выбираю дату из средства выбора даты и времени, значение форматируется и отображается на входе.
data-model-type="YYYY-MM-DDTHH:mm:ss" во входных данных добавляется для адаптации значения модели в совместимом формате для моего API, но это не работает: когда я выбираю дату из datetimepicker, модель ввода не форматируется с использованием заданных параметров, а вместо этого форматируется в стандартном формате данных. Атрибут типа модели работает только тогда, когда непосредственно на входе есть пользовательское событие, за которым следует событие размытия.
Я попытался добавить наблюдателя к входному значению и заставить выполнение $parsers обновить $viewValue
//inside dateTimeInput directive
scope.$watch(function(){
return element.val();
}, function(){
controller.$setViewValue(controller.$viewValue);
});
но не сработало, а затем я попытался смоделировать действие пользователя на вводе, обновив значение элемента, а затем инициировав событие размытия
scope.$watch(function(){
return element.val();
}, function(){
element.val(controller.$viewValue);
element.triggerHandler('input');
});
но это тоже не сработало.
Как я могу вручную заставить синтаксические анализаторы отформатировать мою модель ввода сразу после того, как я выберу дату из таймпикера?