如何处理错误:ngModel:datefmt Model不是日期对象

时间:2015-08-03 11:00:54

标签: javascript regex angularjs html5 date

我在我的项目中使用angularjs。我从后端获取日期字符串。日期字符串可以是任何字符串,可以是日期,也可以不是日期。当我将日期字符串设置为ng-model时,如果它是一个日期字符串,那么它可以正常工作,否则会引发异常

Error: [ngModel:datefmt] http://errors.angularjs.org/1.4.3/ngModel/datefmt?p0=asdfdaf
    at Error (native)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:6:416
    at Array.<anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:167:250)
    at Object.<anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:264:75)
    at n.$get.n.$digest (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:132:124)
    at n.$get.n.$apply (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:135:269)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:19:437
    at Object.e [as invoke] (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:39:156)
    at d (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:19:358)
    at Ac (http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js:20:151)

我不知道如何处理此异常。我正在考虑编写像isDate(dateString)这样的方法,但我不知道我应该在里面写什么,因为日期字符串可以是任何格式的任何字符串。请帮忙,我创建了plunkr here

2 个答案:

答案 0 :(得分:1)

当您的输入设置为键入日期时,angularJS将仅接受Javascript中的Date对象。

但是,当你的输入有一个类型=&#34; date&#34;时,chrome有一个特殊的功能可以正确呈现,但不是其他浏览器的情况。

解决方案是使用字符串...并将其转换为

答案 1 :(得分:1)

你可以有这样的自定义方法

function isValidDate(date) {
  return !! (Object.prototype.toString.call(date) === "[object Date]" && +date);
}

角度网站中有错误说明

  

所有与日期相关的输入都需要模型   是一个Date对象。如果模型是其他东西,则会出现此错误   抛出。 Angular没有在此设置验证错误   这些错误会向用户显示,但错误的状态   是由不正确的应用程序逻辑引起的,而不是由用户引起的。

这意味着,如果你使用的是type =“date”,那么你的ng-model应该是Date对象或一些可以转换为Date对象的字符串值。