md-datepicker必须是Date实例错误

Lun*_*man 3 javascript date angularjs angular-material

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

<md-datepicker ng-model="new.warranty" md-placeholder="Enter date"></md-datepicker>
Run Code Online (Sandbox Code Playgroud)

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

Sun Apr 03 2016 00:00:00 GMT+0300 (EEST)
Run Code Online (Sandbox Code Playgroud)

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

data.warranty = $filter('date')(Date.parse(data.warranty), 'yyyy-MM-dd');
Run Code Online (Sandbox Code Playgroud)

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

`The ng-model for md-datepicker must be a Date instance. Currently the model is a: string`
Run Code Online (Sandbox Code Playgroud)

那么,如果可能的话,我怎么能在不使用moment.js的情况下防止这个错误.

iul*_*ian 6

当你使用$filter('date')你的data.warranty,你从改造它Date的对象为String,因此错误.

选项1

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

<md-datepicker ng-model="new.warrantyDate" md-placeholder="Enter date"></md-datepicker>
Run Code Online (Sandbox Code Playgroud)

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

data.warranty = $filter('date')(Date.parse(data.warrantyDate), 'yyyy-MM-dd');
Run Code Online (Sandbox Code Playgroud)

因此,您的warrantyDate价值将仍然是一个Date对象,并将继续工作.如果您在响应中修改日期,请不要忘记将其warrantyDate与修改日期同步.

选项2

您可以尝试的另一个选项是创建一个$modelValue$viewValue您的data.warranty变量不同的指令.关于如何可以做到这一点的详细信息,请参阅文档ngModelController.

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