angularjs - Angular UI Bootstrap datepicker, View 更改时回调

标签 angularjs twitter-bootstrap datepicker angular-ui-bootstrap angular-ui

我使用最新版本的 Angular UI Bootstrap。

当我的观点发生变化时,我希望有一个回调,即当我从 5 月切换到 6 月时。由于以下情况,我需要这个:

我的日期选择器使用 customClass 函数显示可用和不可用的日期。
我获取了当月的所有可用性,但是当我单击下一个或上一个时,我没有任何回调来获取新的可用性。

另外,我不希望异步调用 42 次(每个类(class)一个),因为您还会在日期选择器中遇到很多时间问题。
我希望有人知道实现这一目标的方法,我现在已经寻找了很长时间的解决方案。

我的 HTML:

<div class="input-group">
      <span class="input-group-addon" ng-click="vm.OpenDatepicker($event,'1')"><i class="ti-calendar"></i></span>
      <input type="text" class="form-control" datepicker-options="dpOptions" readonly style="cursor:pointer; background-color:white;"
             uib-datepicker-popup="dd-MMMM-yyyy" min-date="minDate" show-weeks="true" ng-model="selectedDate"
             is-open="vm.$scope.datepickers[1]" show-button-bar="false" ng-click="vm.OpenDatepicker($event,'1')" />
</div>

在 $scope.dpOptions (DatePicker 选项)中,我定义了自定义类需要是什么:
$scope.dpOptions.customClass= function (data) {
//Here are my availabilities of the first month fetched
//When I change the month in my view, I first want to have the other availabilities 
//so I can return the new red/green classes
};

最佳答案

我的同事找到了一个使用 Angular $provide.decorator 函数的解决方案!
这将为任何现有指令添加一些附加功能。

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

        directive.compile = function () {
            var link = directiveCompile.apply(this, arguments);

            return function (scope) {
                link.apply(this, arguments);

                var oldMove = scope.move;
                scope.move = function (direction) {
                    oldMove.apply(this, arguments);
                    scope.$emit('datepicker.monthChanged', this.rows);
                }
            }
        };
        return $delegate;
    });

现在要调用一个函数,我可以将它添加到任何带有日期选择器的 Controller 中:
$scope.$on('datepicker.monthChanged', function (event, rows) {

            let startDate = rows[0][0].date;
            let endDate = rows[5][6].date;
            //Do anything you want!
            //To add customClass, every column has a customClass attribute you can set.

        });

关于angularjs - Angular UI Bootstrap datepicker, View 更改时回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37293170/

相关文章:

javascript - Grunt复制/ Ant 模式/省略变量目录

javascript - 使用 json 选择下拉值

html - Bootstrap 可变列高度和计数而不会中断流程

html - 将文本与图像一起放入导航栏品牌内

ios - 日期选择器 startDate 和 endDate Swift 3

javascript - 似乎无法在 div-div 标签内执行 has-errors 操作?

javascript - 使用 ui 路由器访问父作用域变量

css - 推特 Bootstrap : Fixed top header and sidebar

javascript - Bootstrap datepicker — 如何获取其他格式的 toDisplay 和其他格式的 toValue

javascript - 设置日期变量的格式以删除不需要的字符