2016-08-08 3 views
2

フォーム内にdatepickerがあります。私は、ビューの1つのフォーマットを設定したいが、(APIに送られる)モデル値に異なるフォーマットを適用したい。 簡単に言えば、ユーザーには 'dd/mm/yyyy'が表示されますが、日付はISO形式で送信する必要があります。modelValueをAngularディレクティブのviewValueと異なる日付形式に設定します

これは私のディレクティブです:

app.directive('standardDatepicker', function($timeout) { 
return{ 
    restrict: 'A', 
    require : '^ngModel', 
    link: function(scope, element, attrs, ngModel, ngModelCtrl){ 
      element.datepicker({ 
       format: "dd/mm/yyyy", 
       autoclose: true, 
      }).on('changeDate', function(e) { 
       ngModel.$viewValue = e.date;  
       ngModel.$render(); 
      }); 
    } 
    } 
}); 

は、これを達成する簡単な方法はありますか?

+0

隠しフィールドを使ってみましたか? – Alok

+0

私はそれを考慮しましたが、ng-repeatsの中にそれらがあると複雑になり始めます。簡単な指示の解決策があるかどうかを確認したい –

答えて

0

あなたは値を変換する$パーサと$フォーマッタがあり$formatters and $parsers

function standardDatepicker() { 
    return { 
     require: 'ngModel', 
     link: function ($scope, $elem, $attrs, $ctrl) { 

      var ngModelCtrl = $ctrl; 

      ngModelCtrl.$formatters.unshift(function (value) { 
       return value.format('YYYY'); 
      }); 

      ngModelCtrl.$parsers.unshift(function (value) { 
       return value.format('YYYY-MM-DD'); 
      }); 

     } 
    } 
} 
0

$ parsersを次のように使用してしまいました。すべての貢献に感謝します。

app.directive('standardDatepicker', function($timeout, dateFilter) { 
return{ 
    restrict: 'A', 
    require : 'ngModel', 
    link: function(scope, element, attrs, ngModel, ngModelCtrl){ 
      element.datepicker({ 
       format: "dd/mm/yyyy", 
       autoclose: true, 
      }).on('changeDate', function(e) { 
       ngModel.$parsers.push(function(viewValue){ 
        var isoDate = moment(e.date).format('YYYY-MM-DD'); 
        return isoDate; 
       }); 
      }); 
     } 
    } 
}); 
関連する問題