如果在angularjs-bootstrap-datepicker中仅输入年份,则默认为年份的开始或结束

问题描述 投票:4回答:2

我正在使用angularjs-bootstrap-datetimepicker,但我无法弄清楚如何在手动输入日期而不是使用UI时选​​择输入完整日期。

也就是说,我希望只能手动输入“ 2020”并让它调用一个函数,在其中我可以指定它应该是“ 2020-01-01,2020-12-31”还是其他所有内容。同时也可以按预期使用GUI。

angularjs twitter-bootstrap datetimepicker
2个回答
0
投票

我认为您可以使用minDateMaxdate

http://next.plnkr.co/edit/VyWzqYk426is0F1g

首先单击最小日期,以便取消日期选择器中输入日期2020的打包,然后按Enter,然后您将看到它禁用了日期。


0
投票

我使用不同的日期选择器解决了类似的问题,但该解决方案也可以在这里使用。

我通过隐藏日期选择器的原始输入并通过将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);
        });
      },
    };
  });
© www.soinside.com 2019 - 2024. All rights reserved.