我正在改进和自动化旧的Web应用程序中的某些东西。其中之一是日期格式。我们曾经使用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;
}
});
}
};
});
问题:
从webservice加载值时,例如:“invoice.date”来自数据库,格式为“yyyy-mm-dd”。它以“dd / mm / yyyy”格式加载到输入中,如果输入被编辑,则由于该指令,模型值为“Date对象”。但如果没有编辑任何字段,则该值仍为“yyyy-mm-dd”,该字符串会导致错误。 (注意:他们使用带有jpa的webservices,我不能在后端更改任何内容)
如何在发送之前格式化值而不进行手动验证并分析每个函数的值?我可以对每个变量使用$ watch而不会导致与指令冲突或无限循环吗? Angular还有其他一些自动化方法吗?
谢谢你的帮助。
我已经看过很多次了,这是很常见的,你正在使用时间,因为jpa或数据库更改日期,因为时区,对吗?
好的,那么它来自webserice所以它可能是json格式。您可以在将日期对象分配给模型值之前简单地转换为日期对象,因此始终使用此格式。另一种方法是在发送之前转换它,你已经说过你想要避免的。
有很多事情可以做。总结一下:
(选一个)
问题是尝试使用angularjs进行自动化,因为有很多方法并且找到“正确”的方法很困难,因为每个项目都是不同的,每个人都有不同的思维方式。