AngularJS 1.4.3 [ngModel:datefmt]预计是一个日期

时间:2015-08-04 19:27:53

标签: angularjs json date

我在通过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'}">

0 个答案:

没有答案