Angular Bootstrap Datepicker更改月份事件

时间:2015-06-15 15:35:22

标签: angularjs datepicker angular-ui-bootstrap

我需要打电话给我的后端,当用户在日期选择日历上更改月份时,UI Bootstrap 1.3是否可以这样做?

1 个答案:

答案 0 :(得分:4)

您可以使用装饰器扩展datepicker指令,并在装饰器中覆盖compile函数以在$watch上添加activeDate。您可以检查日期的月份或年份是否已更改,如果是,则调用您注入装饰器的服务上的函数。如有必要,请在日期中通过,并在服务中执行对后端的调用。

下面和fiddle - MyService中的示例只是记录日期,但您可以使用后端调用替换。

var app = angular.module('app', ['ui.bootstrap']);

angular.module('app').service('MyService', function() {
    this.doStuff = function(date) {
        console.log(date);
    }
});

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

        var link = directive.link;

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

                scope.$watch(function() {
                    return ctrls[0].activeDate;
                }, function(newValue, oldValue) {
                    if (oldValue.getMonth() !== newValue.getMonth() 
                       || oldValue.getYear() !== newValue.getYear()) {
                        MyService.doStuff(newValue);
                    }
                }, true);
            }
        };
        return $delegate;
    }]);
});