将模型值格式化为日期angularjs

问题描述 投票:1回答:1

我正在改进和自动化旧的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还有其他一些自动化方法吗?

谢谢你的帮助。

angularjs date format
1个回答
1
投票

我已经看过很多次了,这是很常见的,你正在使用时间,因为jpa或数据库更改日期,因为时区,对吗?

好的,那么它来自webserice所以它可能是json格式。您可以在将日期对象分配给模型值之前简单地转换为日期对象,因此始终使用此格式。另一种方法是在发送之前转换它,你已经说过你想要避免的。

有很多事情可以做。总结一下:

(选一个)

  1. 在收到格式并在分配之前转换格式。手动,简单的JavaScript或任何其他方法。
  2. 反过来,在发送之前,进行格式更改。
  3. 要避免手动操作,请使用函数或事件查找它,如果$ watch可用于检测它来自哪种格式并正确更改它。因此,如果以编程方式分配,它也将起作用。
  4. 还有其他方法可以过滤和详细说明响应,但我认为对于这种情况来说太过分了。正如Jorge所说,有一些插件,工具和更多可以添加。但我总是尽量避免因为这么多东西而超载。

问题是尝试使用angularjs进行自动化,因为有很多方法并且找到“正确”的方法很困难,因为每个项目都是不同的,每个人都有不同的思维方式。

© www.soinside.com 2019 - 2024. All rights reserved.