关于javascript:md- datePicker – 始终为日期实例错误

md- datePicker - Date instance error always

我收到此错误The ng-model for md-datepicker must be a Date instance. Currently the model is a: string。 我正在使用的时刻..

在视野中

1
<md-datepicker ng-model="Model.currentContact.getSetIncorporated" ng-model-options="{ getterSetter: true }" md-placeholder="Enter date"></md-datepicker>

在模型中

1
2
3
4
5
6
7
8
9
10
11
12
13
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。 目前的版本是

1
2
3
4
5
6
7
8
9
10
$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!
哪个刹车我的页面。


这很简单。 传递给Model.currentContact.getSetIncorporated的值是字符串而不是日期。

以下是问题的一个示例 - CodePen。 控制台显示错误。

1
2
3
4
5
6
angular.module('MyApp',['ngMaterial'])

.controller('AppCtrl', function() {
  this.myDate = new Date();
  this.myDate = this.myDate.toString(); // Comment this out to work correctly
});

这个问题 - 如何检查对象是否是日期? - 将解释如何检查您是否传递字符串或日期。

更新:

消息的原因

Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached.

似乎是因为Contact.prototype.getSetIncorporated正在返回一个Date。 返回一个字符串有效,但ng-model需要一个日期!

这是解决这个问题的一种方法 - CodePen。

1
2
3
4
5
6
7
8
9
10
angular.module('MyApp',['ngMaterial'])

.controller('AppCtrl', function($scope) {
  this.myDate = new Date();

  this.test = function () {
    return new Date();
  }  
  this.testModel = this.test();
});

标记

1
2
3
  <md-content>
    <md-datepicker ng-model="vm.testModel"  ng-model-options="{ getterSetter: true }" ng-change="change()"></md-datepicker>
  </md-content>


当你使用片刻时,你必须从瞬间获取_d属性:

1
2
3
4
5
6
7
8
9
    var _convertStringToDate = function (stringDate) {

        var date;
        if (angular.isString(stringDate)) {
            date = moment(stringDate)._d;
        }

        return date;
    };