【发布时间】:2015-07-30 23:35:10
【问题描述】:
使用 AngularJS 和 angular-resource 1.4.1,我有一个超级简单的 Event 服务,其开始日期和可选结束日期:
angular.module('jtm.events').factory( 'Event', [
'$resource',
function($resource) {
var Event = $resource( '/events/:id.json',
{id: '@id'}
);
// EDIT: added this method
Event.index = function() {
var events = this.query();
angular.forEach( events, function($event) {
$event.start_date = new Date($event.start_date);
});
return events;
};
return Event;
}
]);
Event.query() 的典型结果如下所示:
[
{
id: 1,
start_time: "2015-08-25T00:47:16Z",
end_time: null
...
},
...
]
在(面向最终用户的)前端,我通过我设置的 moment.js 过滤器运行这些日期,并按预期呈现它们而没有任何 JS 错误。但是,在管理事件表单上,我有:
<input type="datetime-local" ng-model="event.start_time" ng-required="true">
这是投掷:
Error: [ngModel:datefmt] Expected `2015-08-25T00:47:16Z` to be a date
并在管理表单字段中呈现占位符 mm/dd/yyyy, --:-- -- 掩码。
这不是有效的 ISO 8601 日期字符串吗?我是否需要以某种方式更改我的服务/模块配置才能使其正常工作?
编辑
我没有定义自定义 index 动作,而是使用拦截器覆盖 query 动作配置,将 start_time 字符串包装在适当的 Date 对象中:
angular.module('jtm.events').factory( 'Event', [
'$resource',
function($resource) {
var Event = $resource( '/events/:id.json',
{id: '@id'},
{
query: {
action: 'query',
isArray: true,
transformResponse: function(response) {
response = angular.fromJson(response);
angular.forEach( response, function($event) {
$event.start_time = new Date($event.start_time);
});
return response;
},
},
}
);
return Event;
}
]);
【问题讨论】:
标签: javascript angularjs datetime