Я улучшаю и автоматизирую определенные вещи в старом веб-приложении.Одним из них является формат даты.Мы привыкли обрабатывать их с помощью функций jquery, а теперь мы делаем это с помощью angularjs.
Для ввода мы используем директиву, и она отлично работает.Проблема возникает, когда она не используется, директива не выполняется и значение модели остается без правильного значения.
Директива:
app.directive('formatDate', function($filter) {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, modelCtrl) {
// format text (model to view)
modelCtrl.$formatters.push(function(value) {
if(value !== "" && typeof value !== "undefined" && value !== null){
return value.split("-").reverse().join("/");
}
});
// format text (view to model)
modelCtrl.$parsers.push(function(value) {
if(value !== "" && typeof value !== "undefined" && value !== null){
var date = new Date(value.split("/").reverse().join("-"));
date.setMinutes(date.getMinutes() + date.getTimezoneOffset());
return date;
}
});
}
};
});
Проблема:
При загрузке значения из веб-службы, например: « invoice.date » поступает из базы данных в формате « гггг-мм-дд ».Он загружается во входные данные в формате « дд / мм / гггг » и, если ввод редактируется, значением модели является «Объект даты» благодаря директиве.Но если поле не редактируется, значение остается « гггг-мм-дд », и эта строка вызывает ошибки.(Примечание: они используют веб-сервисы с jpa, и я не могу ничего изменить в серверной части)
Как отформатировать значение перед отправкой, не выполняя ручную проверку и анализ значения в каждой функции?Могу ли я использовать $ watch для каждой из переменных, не вызывая конфликта с директивой или бесконечным циклом?У Angular есть какой-то другой способ автоматизировать это?
Спасибо за любую помощь.