【问题标题】:bootstrap-datepicker (range) - AngularJS Directivebootstrap-datepicker (范围) - AngularJS 指令
【发布时间】:2017-02-05 06:59:18
【问题描述】:

我正在尝试使用bootstrap-datepicker。 我有一个现有的 AngularJS 指令,但是在设置初始值时,在使用日期范围时它不会更新。

HTML

        <div class="input-group input-daterange" id="fromToDate" calendar ng-model="vm.fromToDate">
            <input type="text" class="form-control input-sm" required ng-model="vm.bookingFromDate">
            <span class="input-group-addon">to</span>
            <input type="text" class="form-control input-sm" required ng-model="vm.bookingToDate">
        </div>

指令

// this directive updates the value, once it has been selected, but not when the initial value has been set**
function calendar() {
    return {
        require: 'ngModel',
        link: function($scope, el, attr, ngModel) {
            $(el)
                .datepicker({
                    autoclose: true,
                    todayHighlight: true,
                    todayBtn: 'linked',
                    onSelect: function(dateText) {
                        $scope.$apply(function() {
                            ngModel.$setViewValue(dateText);
                        });
                    }
                });
        }
    };
};

然后,我尝试了以下指令(找到 here),但这也不适用于日期范围 - 相反:

function calendar() {
    return {
        require: '?ngModel',
        restrict: 'A',
        link: function ($scope, element, attrs, controller) {
            var updateModel, onblur;

            if (controller != null) {

                updateModel = function (event) {
                    element.datepicker('hide');
                    element.blur();
                };

                onblur = function () {
                    var date = element.val();
                    return $scope.$apply(function () {
                        return controller.$setViewValue(date);
                    });
                };

                controller.$render = function() {
                    var date = controller.$viewValue;
                    element.datepicker().data().datepicker.date = date.from.toDate();
                    element.datepicker('setValue');
                    element.datepicker('update');
                    return controller.$viewValue;
                };
            }
            return attrs.$observe('bdatepicker', function (value) {
                var options = {
                    format: "yyyy/mm/dd",
                    todayBtn: "linked",
                    autoclose: true,
                    todayHighlight: true
                };
                return element.datepicker(options).on('changeDate', updateModel).on('blur', onblur);
            });
        }
    };
};

任何帮助将不胜感激! 谢谢!

[更新]

CodePen 说明问题:

<p data-height="322" data-theme-id="dark" data-slug-hash="BLkagb" data-default-tab="js,result" data-user="Programm3r" data-embed-version="2" class="codepen">See the Pen <a href="http://codepen.io/Programm3r/pen/BLkagb">Bootstrap-Datepicker (Range) AngularJS</a> by Richard  (<a href="http://codepen.io/Programm3r">@Programm3r</a>) on <a href="http://codepen.io">CodePen</a>.</p>
<script async src="//assets.codepen.io/assets/embed/ei.js"></script>

【问题讨论】:

  • 有什么错误吗?你能提供任何有效的 JSFIDDLE 吗?
  • @Pradeepb 没有错误,它基本上设置了输入值,但同时破坏了日期选择器。选择器弹出窗口在初始设置后不再显示。我会做一个小提琴......完成后会更新问题。感谢您的回复!
  • 好的。你如何设置初始值?你可以用这个JSFIDDLE来修改。
  • 我正在使用 angularjs 设置值。因为 ng-model 绑定到控制器中的变量
  • @Pradeepb 添加了 codepen 和链接

标签: javascript jquery angularjs twitter-bootstrap datepicker


【解决方案1】:

您可以使用以下库来解决此问题。 datepicker

编辑:解决日期消失的问题。

<input type="text" class="form-control input-sm" ng-model="vm.bookingFromDate" id="fromDate">
<span class="input-group-addon">to  </span>
<input type="text" class="form-control input-sm" ng-model="vm.bookingToDate" id="toDate">

在控制器中

$('#fromDate').val(vm.bookingFromDate);
$('#toDate').val(vm.bookingToDate);

【讨论】:

  • 您好 Pradeepb,感谢您的努力,但恐怕这会消除日期范围功能。并且知道我们坐在两个独立的日历上。我有一个日历范围很重要。再次感谢!
  • 好的。我可以知道你打算如何处理日期范围,为什么你不能用上面的代码来做?
  • 以上代码不执行任何检查,如果开始日期在结束日期之后,反之亦然。所以现在我必须自己执行这个,感觉就像重新发明轮子一样。我打算如何处理它......没有线索,这就是我问这个问题的原因
  • 我不确定。当我使用 datepicker 时,我必须手动设置最小和最大日期。
  • 那么,如何显示说明某个范围正在使用的 UI。换句话说,在用户体验层面,你会如何让用户友好?
猜你喜欢
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多