角度UIブートストラップ日付ピッカーをロードするとき、私は角度のUIブートストラップ日付ピッカーを使用しています: https://angular-ui.github.io/bootstrap/#/datepickerパースの日付文字列
私は、サーバーから受信したデータを使用してフォームをレンダリングする場合、日時フィールドに問題があります。私の入力日付ピッカーは次のようになります。私はモデル$scope.item = response;
に応答データを割り当てると
{
...
startedAt: "2015-05-29T02:00:00+0200"
}
、DatePickerの入力フィールドが正しくレンダリングされる(正確な日付は次のとおりです。
<form name="itemForm">
<input type="datetime" class="form-control" id="startedAt" name="startedAt"
ng-model="item.startedAt"
ng-click="open($event, 'startedAt')"
uib-datepicker-popup="yyyy-MM-dd"
is-open="datepickers.startedAt"
/>
</form>
私のサーバーは、JSON文字列として応答日時を返します。選択されたフォーマットで適切にフォーマットされています)。問題は、検証が合格しないことです。私が取得:
itemForm.startedAt.$invalid == true
私は($scope.item.startedAt
がDate
で、私は日付ピッカーから新しい日付を選択した場合)DatePickerのフィールドにバインドされたデータは、Date
オブジェクトではなく文字列でなければならないことに気づい
私は回避するために管理しました
$scope.item = response;
$scope.item.startedAt = new Date($scope.item.startedAt);
は、それがこのように動作します...しかし、私は手動で文字列が、私は、サーバーからの応答を取得するたびに日付を行うに変換したくない:この問題は、コントローラでこれを行うと。私はそれが私のためng-model
を変換して、私はDatePickerの入力フィールドに割り当てることができ、ディレクティブを作成しようとしました:
.directive("asDate", function() {
return {
require: 'ngModel',
link: function (scope, element, attrs, modelCtrl) {
modelCtrl.$formatters.push(function (input) {
var transformedInput = new Date(input);
if (transformedInput != input) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
}
})
まあ、それは動作しますが、今、私は私の見解でDate
オブジェクト、I出力モデルを見ることができるので、 :{{item.startedAt}}
。しかし、まだの妥当性検査は失敗します!私は、モデルとビューの間でデータがどのように流れるか、そしてUI Bootstrapがその中にどのように繋がっているかを理解している私にはいくつかの問題があると思われます。私は$formatters.push
から$formatters.unshift
に自分のディレクティブを変更したときに
はまた、検証がOKに動作しますが、日付ピッカーは、これは角のよう破った
awwは男のようなものを文字列に変換することができます! –
@VictorParmar現在、私はこれをやり遂げています - サーバーから受信するときにレスポンス文字列をDateオブジェクトに変換しています。サーバーに送信するときにDateオブジェクトを文字列に変換します。これらはすべて角度制御器で手動で行われました。たぶん私は角のサービスとしてこのロジックを抽出するだろうが、私はディレクティブ – rsobon
ええ、クラブに参加することが可能だとは思わない - 私たちは同じことをやった: –