4

サーバーからモデルを取得すると、次のようになります。

$scope.m = 
{
   name: "John",
   Dt:   "2013-10-03T18:47:33.5049087-07:00"
};

ビューは次のようになります。

<input title="Date" ui-date ng-model="m.Dt" />

jQuery datepicker のデフォルトの日付形式を次のように設定します。

$.datepicker.setDefaults({dateFormat: 'mm-dd-yy'});

ただし、入力の初期値は「2013-10-03T18:47:33.5049087-07:00」のままです。mm-dd-yy日付ピッカーを使用して日付を変更したかのようにフォーマットするだけです。

mm-dd-yy初期値もフォーマットにするにはどうすればよいですか?

4

3 に答える 3

1

$scope.m.Dt プロパティは、文字列ではなく日付型である必要があります。

$scope.m = 
{
   name: "John",
   Dt:   new Date()
};

日付形式を設定するには、次のように ui-date-formatディレクティブを使用します。

<input title="Date" ui-date ui-date-format="mm-dd-yy" ng-model="m.Dt" />

readme の例を参照してください: https://github.com/angular-ui/ui-date#ui-date-format-directive

于 2013-10-04T03:25:25.167 に答える
0

問題は、「日付」が単なる文字列であり、Angular がネイティブの Date オブジェクト (またはタイムスタンプ) を必要とすることです。

これに対処する 2 つの方法を見つけました。データをすぐにスクラブするか、変数を監視してその型を再割り当てします。

私の好みの解決策は、データが取り込まれたときにデータを変更することです。オブジェクトに があることがわかっているので、次のように promisedateから JSON データをスクラブします。$http success

$http.get('data.json').success(function(data) {
    data.date = Date.parse(data.date);
    $scope.model = data;
}

これにより、データが に割り当てられる前にデータが変換される$scopeため、Angular は$scope.model.dateネイティブ JS Date オブジェクトとして正しくフォーマットされていると認識します。

もう 1 つの解決策は、具体的$watchには変数の型です。コントローラーのどこかに、これを追加します。

$scope.$watch('model.date', function() {
    if (typeof $scope.model.date === 'string') {
        $scope.model.date = Date.parse($scope.model.date);
    }
});

これは、変更されるたびに型をチェックします$scope.model.date。明らかに、それはより多くのオーバーヘッドですが、場合によっては役立つかもしれません。

于 2013-10-31T20:44:37.990 に答える