md-datepicker必须是Date实例错误

时间:2016-04-06 08:43:48

标签: javascript angularjs date angular-material

我这里有问题。我想以模态形式使用Angular Material datepicker。我只是将它添加到我的表单中

<md-datepicker ng-model="new.warranty" md-placeholder="Enter date"></md-datepicker>

如果我提交表格,我得到了这个:

Sun Apr 03 2016 00:00:00 GMT+0300 (EEST)

但是我想在发送之前以yyyy-MM-dd格式转换数据,所以我试图以这种方式转换日期格式

data.warranty = $filter('date')(Date.parse(data.warranty), 'yyyy-MM-dd');

所以我的表格发送了一个必需的yyyy-MM-dd格式,但每当我汇总表格时我都会收到错误。

`The ng-model for md-datepicker must be a Date instance. Currently the model is a: string`

所以,如果可能,请不要使用moment.js,如何防止此错误。

2 个答案:

答案 0 :(得分:6)

当您在$filter('date')上使用data.warranty时,会将其从Date对象转换为String,因此会出错。

选项1

解决此问题的最快方法是将日期值复制为字符串:

<md-datepicker ng-model="new.warrantyDate" md-placeholder="Enter date"></md-datepicker>

每当您提交表单时,在提出请求之前,请以您需要的格式转换日期,但不要覆盖现有日期

data.warranty = $filter('date')(Date.parse(data.warrantyDate), 'yyyy-MM-dd');

因此,您的warrantyDate值仍将是Date对象,并将继续有效。如果您在回复中修改日期,请不要忘记将warrantyDate与修改日期同步。

选项2

您可以尝试的另一个选项是为$modelValue变量创建一个不同$viewValuedata.warranty的指令。有关如何实现此目标的详细信息,请参阅ngModelController上的documentation

第二个选项需要更深入地了解角度是如何工作的,所以如果你处于angularjs路径的最开头,你可能会选择第一个选项。

答案 1 :(得分:0)

我通过覆盖md-datepicke解决了这个问题 ,这是代码

if