我在通过AJAX加载日期输入时遇到了一些麻烦。 我的 PHP服务器将 PDO 查询中的日期作为 JSON 格式的字符串返回,例如 2014-01-27 。我看了other forum posts告诉我将字符串转换为日期对象:
$scope.created_time = new Date(dateString);
然而,我不能让它在我的最终工作。这是我的转换代码:
results.data.jobCreated = new Date(results.data.jobCreated);
我甚至检查了数据以确保它是对象类型日期:
alert(results.data.jobCreated instanceof Date);
这会返回一个“true”的警告,但浏览器控制台仍然会出现以下错误:
Error: [ngModel:datefmt] Expected `2014-01-27` to be a date
http://errors.angularjs.org/1.4.3/ngModel/datefmt?p0=2014-01-27
at REGEX_STRING_REGEXP (angular.js:68)
at Array.<anonymous> (angular.js:21615)
at Object.ngModelWatch (angular.js:25159)
at Scope.$get.Scope.$digest (angular.js:15675)
at Scope.$get.Scope.$apply (angular.js:15951)
at done (angular.js:10364)
at completeRequest (angular.js:10536)
at XMLHttpRequest.requestLoaded (angular.js:10477)
如果我使用双花括号直接在DOM中显示代码,则显示以下内容:
{"jobCreated":"2014-01-28T00:00:00.000Z"}
这似乎表明Date对象转换正在运行,但我不确定为什么Angular仍然不接受我的Date对象。
提前感谢您提供任何建议。
我还应该提一下,我有一个指令,将ng-model格式设置为“YYYY-MM-DD”,这样我也可以验证PHP服务器上的日期格式:
.directive("myModelFilter", ["$filter", function($filter){
return {
restrict: 'A', // only activate on element attribute
require: '?ngModel',
link: function(scope, element, attrs, ngModelController)
{
ngModelController.$parsers.push(function(data) {
//convert data from view format to model format
// Grab the parameters
var params = scope.$eval(attrs.myModelFilter) ;
// Filter with the parameters passed
return $filter(params.filter)(data, params.expr, params.comp);
});
ngModelController.$formatters.push(function(data) {
//convert data from model format to view format
// Grab the parameters
var params = scope.$eval(attrs.myModelFilter) ;
// Filter with the parameters passed
return $filter(params.filter)(data, params.expr, params.comp);
});
}
};
}])
这是输入的HTML:
<input name="jobCreated" ng-model="formData.jobCreated" required="required" type="date" placeholder="yyyy-mm-dd" my-model-filter="{filter:'date',expr:'yyyy-MM-dd'}" jquery-date-picker="{dateFormat:'yy-mm-dd'}" jquery-mask="{format:'0000-00-00',placeholder:'yyyy-mm-dd'}">