angular
application with Django
with rest-framework
。で作業しています。
アプリはサーバーからjsonで情報を受け取ります。キーの1つはcreated_time
...です。このフィールドの値は、iso-8601
に基づいた形式で、たとえば2015-05-29T19:06:16.693209Z
です。
クライアントにはフィールドがあります:
<input type="time" ng-model="created_time">
しかし、データが到着すると、このエラーが発生します:
Error: [ngModel:datefmt] Expected `2015-05-29T19:06:16.693209Z` to be a date http://errors.angularjs.org/1.3.13/ngModel/datefmt?p0=2015-05-29T19%3A06%3A16.693209Z
at REGEX_STRING_REGEXP (angular.js:63)
at Array.<anonymous> (angular.js:19807)
at Object.ngModelWatch (angular.js:23289)
at Scope.$get.Scope.$digest (angular.js:14235)
at Scope.$get.Scope.$apply (angular.js:14506)
at done (angular.js:9659)
at completeRequest (angular.js:9849)
at XMLHttpRequest.requestLoaded (angular.js:9790)
私はすでにすべてを試しました:(形式は角度のドキュメントの指示とまったく同じです...
これはangular 1.3+で発生している必要があります。日付/時刻入力のワードngモデルの1.3以上は有効な日付オブジェクトである必要があり、日付の文字列表現は許可されなくなりました。文字列を日付オブジェクト($scope.created_time = new Date(dateString)
)に変換し、ng-modelにバインドする必要があります。 エラーリンク に従うと、エラーに関する明確な説明とその解決方法が示されます。
などのすべての日付関連の入力では、モデルがDateオブジェクトである必要があります。モデルが別のものである場合、このエラーがスローされます。この場合、Angularは検証エラーを設定しません。これらのエラーはユーザーに表示されるためですが、誤った状態はユーザーではなく不正なアプリケーションロジックが原因で発生します。
RESTサービスからデータを取得する場合、フィールドを日付に変換するだけです。
$http.get(url).success(function(data){
$scope.data = data; // get row data
$scope.data.mydatefield = new Date($scope.data.mydatefield); // convert filed to date
});
モデル値を変換する単純なディレクティブを作成します。
HTML:
<input date-input type="time" ng-model="created_time">
指令:
app.directive('dateInput', function(){
return {
restrict : 'A',
scope : {
ngModel : '='
},
link: function (scope) {
if (scope.ngModel) scope.ngModel = new Date(scope.ngModel);
}
}
});
PSLの答えに加えて。これは、angular 1.3+要件をDateオブジェクトにオーバーライドする方法です。
<input type="date" ng-model="book.date" date-format/>
app.directive('dateFormat', function() {
return {
require: 'ngModel',
link: function(scope, element, attr, ngModelCtrl) {
//Angular 1.3 insert a formater that force to set model to date object, otherwise throw exception.
//Reset default angular formatters/parsers
ngModelCtrl.$formatters.length = 0;
ngModelCtrl.$parsers.length = 0;
}
};
});
AngularFire $ firebaseObjectで使用でき、$ bindTo 3ウェイバインディングで正常に動作します。 $ firebaseObjectサービスを拡張する必要はありません。 Ionic/cordovaアプリケーションで動作します。
この回答 に基づく
日付が1日減る場合は、このコードを使用します。
new Date(moment.utc(value).format('l LT'))
私はこのエラーがあり、オブジェクトを直接使用しました:私が実行した解決策を投稿しています:
1:$ userData.dob = new Date(userData.dob); 2:$ scope.edit.userdob = userData.dob; 1エラーが発生する前に、オブジェクトを直接作成し、それを編集スコープに割り当てて、問題を解決しました。
問題実際、これは日付形式の問題です。このコードを使用してこの問題を解決しました。 解決策:以下のコードはこの問題を解決します:
var options = {
weekday: "long", year: "numeric", month: "short",
day: "numeric", hour: "2-digit", minute: "2-digit"
};
$scope.created_time = $scope.created_time.toLocaleTimeString("en-us", options);
en-us format = "Friday、Feb 1、2013 06:00 AM"、これが他の人の問題解決に役立つことを願って、私はそのようなエラーに直面し、これで解決しました。