現在までのユーザー入力を解析して検証するディレクティブが必要です。だから私は次のように書いた:
myDirectives.directive('myDate', function($filter) {
'use strict';
return {
require:'ngModel',
restrict:'A',
link:function (scope, elem, attrs, ctrl) {
var dateFormat = attrs.myDate ? attrs.myDate : 'shortDate';
ctrl.$formatters.unshift(function(modelValue) {
return $filter('date')(modelValue, dateFormat);
});
ctrl.$parsers.unshift(function(viewValue) {
var date = new Date(viewValue);
if (isNaN(date)) {
ctrl.$setValidity('date', false);
return undefined;
} else {
var dateString = $filter('date')(date, dateFormat);
if (dateString !== viewValue) {
ctrl.$setViewValue(dateString);
}
ctrl.$setValidity('date', true);
return date;
}
});
}
};
});
解析は、入力がフォーカスを失った後にのみ行う必要があるため、ここで見つけた別のディレクティブを使用します。問題は
ctrl.$setViewValue(dateString);
angularjsのドキュメントに示されているように、 setViewValue() はDOMイベントハンドラー内から呼び出す必要があるため、機能しません。解析結果を反映するにはどうすればよいですか?