2016-09-14 53 views
4

我得到這個錯誤The ng-model for md-datepicker must be a Date instance. Currently the model is a: string。我在模型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使用瞬間..

鑑於

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

。目前的版本是

$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); 
     }; 

當我說字符串轉換爲新的日期()Date對象的服務器發送該字符串2016-09-10T22:00:00.000Z

,我得到了mdDatePicker出正確的結果,但我得到的也 Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting! 這剎車我的頁面。

回答

1

這很簡單。您傳遞給​​的值是一個字符串而不是日期。

下面是一個問題的例子 - 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? - 將解釋如何查看是否在傳遞一個字符串或日期。

更新:

的原因消息

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

似乎是因爲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> 
+0

我知道這是一個字符串...我甚至嘗試轉換該字符串與新的日期(stringDate),但得到無限的摘要循環錯誤。 – Alexa

+0

'未捕獲錯誤:[$ rootScope:infdig] 10 $ digest()迭代到達。放棄!' – Alexa

+0

@Alexa - 您可能想補充說,您的問題可能是主要問題。 –

0

當您使用時刻,你必須從此刻採取_D屬性:

var _convertStringToDate = function (stringDate) { 

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

     return date; 
    }; 
+0

我得到了 '未捕獲的錯誤:[$ rootScope:infdig] 10 $ digest()迭代到達。中止!' – Alexa

+0

你可以發佈你的代碼嗎? – milan