Angular - ui-bootstrap - datepicker - 有没有办法检测月份何时发生变化?

sam*_*tin 6 angularjs angular-ui-bootstrap

我想将日期更改为当前所选月份的第1天.

有没有办法监控月份按钮上的点击事件?

蒂姆萨姆

spo*_*uck 4

Datepicker 的作用域有一个属性“activeDateId”,您可以查看该属性。当你切换月份时它会​​改变。

我认为最好的方法是在 datepicker 指令上创建一个“装饰器”,以便您可以向其添加功能。如果您覆盖指令的“编译”功能,则可以访问其范围。

您可以在 module.config 函数中执行此操作:

$provide.decorator('datepickerDirective', function($delegate) {
    var directive = $delegate[0];

    /* Override compile */
    var link = directive.link;

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

            scope.$watch('activeDateId', function() {
              console.log('switched');
            });
        }
    };

    return $delegate;
});
Run Code Online (Sandbox Code Playgroud)

编辑

我遇到了与此类似的代码问题,如果您切换月份并且这 2 个月的第一个日期在同一天,则 $watch 将不会触发。您可以通过观察 Datepicker 控制器中属性“activeDate”的值来解决此问题:

            scope.$watch(function() {
              return ctrl.activeDate.getTime();
            }, function() {
              console.log('switched');
            });
Run Code Online (Sandbox Code Playgroud)