如何在当前月份之外禁用 Angular UI 日期选择器按钮?

How can I disable the Angular UI Datepicker buttons outside of the current month?

我在 Angular 中使用 Bootstrap UI 日期选择器,它工作正常。但是,当我在月视图中时,月外的日子在名为 text-muted 的跨度上有一个 CSS class,我已将其设置为 display:none.

一切都很好 - 我现在看不到其他月份的日期,这符合我的设计。但是这些日期的封闭按钮仍然可以点击,而且似乎没有 class 或任何类型的钩子来禁用它们。有人解决了这个问题 - 我认为这将是 Datepicker 指令本身的一个简单配置,但一定是忽略了答案?

因此,如果我在 5 月,我会关闭 4 月和 6 月的日期,因此您看不到日期,但仍然可以单击按钮转到其他月份的那些日期....


澄清一下,如果当前日期是 5 月,并且我在视图中查看的是 5 月,我不希望能够看到或单击 4 月或 6 月的日期。但是,当我使用下个月按钮并查看 6 月份时,我不想看到 5 月或 7 月的日期。

创建一个可以访问日期选择器控制器的 activeDate 属性 的装饰器,它将告诉您正在查看哪个月份。然后覆盖控制器上的 isDisabled 函数,这样如果您在日视图中,并且该月不是活动月,则日期将被禁用。

angular.module('app').config(function($provide) {
    $provide.decorator('datepickerDirective', ['$delegate', function($delegate) {
        var directive = $delegate[0];
        var link = directive.link;

        directive.compile = function() {
            return function(scope, element, attrs, ctrls) {
                link.apply(this, arguments);

                ctrls[0].isDisabled =  function(date) {
                    return (scope.datepickerMode === 'day'
                        && (date.getMonth() !== ctrls[0].activeDate.getMonth()
                            || date.getYear() !== ctrls[0].activeDate.getYear()));
                };
            }
        };
        return $delegate;
    }]);
});

fiddle