我收到此错误The ng-model for md-datepicker must be a Date instance. Currently the model is a: string
。我正在使用片刻..
在视图中
<md-datepicker ng-model="Model.currentContact.getSetIncorporated" ng-model-options="{ getterSetter: true }" md-placeholder="Enter date"></md-datepicker>
在模型中
Contact.prototype.getSetIncorporated = function(date) {
if (arguments.length) {
this.company.information.incorporatedObject = date;
this.company.information.incorporated = moment.utc(date).format('X');
}
if (!this.company.information.incorporatedObject) {
if (this.company.information.incorporated !== '') {
this.company.information.incorporatedObject = moment.utc(this.company.information.incorporated, 'X').toDate();
} else {
this.company.information.incorporatedObject = null;
}}
return this.company.information.incorporatedObject;
}
此外,我尝试了几个mdLocale.formatDate和parseDate。当前版本是
$mdDateLocale.formatDate = function(date) {
return moment(date).format('YYYY/MM/DD');
};
$mdDateLocale.parseDate = function(dateString) {
var m = moment(dateString, 'YYYY/MM/DD', true);
return m.isValid() ? m.toDate() : new Date(NaN);
};
服务器正在发送此字符串2016-09-10T22:00:00.000Z
当我使用新的Date()将该字符串转换为Date对象时,我在mdDatePicker中显示正确的结果,但我也得到了
Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
哪个刹车我的页面。
答案 0 :(得分:1)
这很简单。您传递给Model.currentContact.getSetIncorporated
的值是字符串而不是日期。
以下是问题的一个示例 - CodePen。控制台显示错误。
angular.module('MyApp',['ngMaterial'])
.controller('AppCtrl', function() {
this.myDate = new Date();
this.myDate = this.myDate.toString(); // Comment this out to work correctly
});
这个问题 - How to check whether an object is a date? - 将解释如何检查您是否传递字符串或日期。
<强>更新强>
消息的原因
未捕获错误:[$ rootScope:infdig] 10 $ digest()已达到迭代次数。
似乎是因为Contact.prototype.getSetIncorporated
正在返回日期。返回字符串有效但ng-model
需要日期!
这是一种解决问题的方法 - CodePen。
angular.module('MyApp',['ngMaterial'])
.controller('AppCtrl', function($scope) {
this.myDate = new Date();
this.test = function () {
return new Date();
}
this.testModel = this.test();
});
标记
<div ng-controller="AppCtrl as vm" ng-cloak="" class="datepickerdemoBasicUsage" ng-app="MyApp">
<md-content>
<md-datepicker ng-model="vm.testModel" ng-model-options="{ getterSetter: true }" ng-change="change()"></md-datepicker>
</md-content>
</div>
答案 1 :(得分:0)
当你使用时,你必须从瞬间获取_d属性:
var _convertStringToDate = function (stringDate) {
var date;
if (angular.isString(stringDate)) {
date = moment(stringDate)._d;
}
return date;
};