Итак, у нас есть модель с «временем» в ней, отформатированная как «14: 00: 00». Мы используем timepicker углового ускорителя, но он ожидает объект даты JS или строку даты и времени ISO.Angular JS ngModel: Преобразовать данные
Моя первая мысль заключалась в том, чтобы сделать директиву, которая добавит $ parser/$ formatter к контроллеру ngModel, который будет конвертировать его по пути и в нужный формат. Это работает для вывода, но не для ввода.
Я сделал скрипку здесь http://jsfiddle.net/HB7LU/1820/
myApp.directive('timespan',function($filter){
var dateFilter = $filter('date');
function parser(data){
return dateFilter(data,'HH:mm:ss');
};
function formatter(data){
var converted = '2000-01-01T' + data + '-06:00';
return converted;
};
return {
require: 'ngModel',
link:function(scope,element,attrs,ctrl){
ctrl.$parsers.unshift(parser);
ctrl.$formatters.unshift(formatter);
}
};
});
, как вы канистра при открытии скрипки 12:00:00 не отражаются timepicker. Если вы посмотрите на консоль, она сообщит, что ngModel находится в неправильном формате. Если вы измените время с помощью сборщика, вы увидите, что $ scope.myModel.time находится в правильном формате.
Как мне получить ngModel в правильном формате, прежде чем он попадет в timepicker?
цепочка форматирования не в рендере, цепочка форматирования находится в $ watch (ngModelWatch) и запускается на каждом дайджесте. Вы, однако, правы, что использование модели modelValue для timepickers вместо viewValue является причиной этой проблемы. Поскольку мы используем 0.8.0, мы просто модифицировали угловую бутстрап, чтобы использовать viewValue, и теперь он работает так, как ожидалось. Thx – Grummle
Спасибо за исправление. Обновлен ответ. –