0

我在 AngularJS 1.3.10 中有以下代码:

ngModelCtrl.$formatters.unshift(function (modelValue) {
    console.log(modelValue)
    var temp = dateFilter(modelValue, 'yyyy-MM-dd');
    console.log(temp);
    return temp;
});

返回的结果仍然是完整的日期格式

Fri Feb 27 2015 14:05:20 GMT-0700 (Mountain Standard Time)

代替

2014-02-27

这是一个显示问题的plunker:

http://plnkr.co/edit/pOKtD5hScXsPMHFAeglC?p=preview

任何想法为什么它不起作用?

4

2 回答 2

2

我得到了它的工作

var temp = dateFilter(new Date(modelValue), 'yyyy-MM-dd');

(也就是说,我对格式化程序知之甚少,不知道这是否是一个正确的解决方案,或者你是否应该做一些不同的事情。)

您看到此行为的原因是因为有一个默认格式化程序将其参数转换为字符串,并且 Angular 以相反的顺序执行格式化程序。因为您在前面插入了格式化程序,所以默认格式化程序在您看到模型值之前已经将其转换为字符串。因此,或者您可以更改unshiftpush,或者将整个$formatters数组替换为仅包含您的函数的数组,并且它们都可以等效地工作。我不完全确定这样做会产生什么副作用。

于 2015-02-27T21:15:56.513 回答
1

您需要将模型值包装在Date Object. 因为要使用角度日期过滤器,您需要传递一个 Date Javascript 对象。

dateFilter(new Date(modelValue), 'yyyy-MM-dd');

这是您的http://plnkr.co/edit/Jdms8NOtdMQ83KLb1X0D工作

于 2015-02-27T21:21:36.963 回答