我正在使用angularjs-bootstrap-datetimepicker,但我无法弄清楚如何在手动输入日期而不是使用UI时选择输入完整日期。
也就是说,我希望只能手动输入“ 2020”并让它调用一个函数,在其中我可以指定它应该是“ 2020-01-01,2020-12-31”还是其他所有内容。同时也可以按预期使用GUI。
我认为您可以使用minDate
和Maxdate
http://next.plnkr.co/edit/VyWzqYk426is0F1g
首先单击最小日期,以便取消日期选择器中输入日期2020的打包,然后按Enter,然后您将看到它禁用了日期。
我使用不同的日期选择器解决了类似的问题,但该解决方案也可以在这里使用。
我通过隐藏日期选择器的原始输入并通过将ng-model绑定到相同范围值的单独输入字段来解决了我的问题。然后,我在上面附加了自己的指令,该指令为理解我的自定义格式的用户输入实现了解析器。 (请参见ngModel.$parsers):
<input ng-model="my.model" my-parser>
<my-datepicker-directive ng-model="my.model">
指令是这样实现的。您只需要实现自己的myParserFunction()
和myFormattingFunction()
(如果要验证输入,就可以实现myValidationFunction()
):
angular.module('app')
.directive('myParser', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModelController) {
/*
* Display -> Model
*/
ngModelController.$parsers.push(function (inputValue) {
if (!myValidationFunction(inputValue)) {
ngModelController.$setValidity('myParser', false);
return null;
}
ngModelController.$setValidity('myParser', true);
return myParserFunction(inputValue);
});
/*
* Model -> Display
*/
ngModelController.$formatters.push(function (modelValue) {
return myFormattingFunction(modelValue);
});
},
};
});