如何捕捉引导日期选择器更改事件?

Posted

技术标签:

【中文标题】如何捕捉引导日期选择器更改事件?【英文标题】:How to catch the bootstrap datepicker change event? 【发布时间】:2015-06-12 09:29:17 【问题描述】:

现在我正在尝试在用户更改日期后做一些事情。但似乎我的ng-change 被忽略了。

这是我的代码示例:

 <input ng-change='changedate()'
                       type="text" 
                       starting-day="2" 
                       show-button-bar="false" 
                       show-weeks="false" 
                       class="form-control addTicketDateInput" 
                       datepicker-popup="dd MMM" 
                       ng-model="startdate" 
                       is-open="openstart"                         
                       datepicker-options="dateOptions"           
                       ng-required="true"
                       close-text="Close" />

在我的控制器中:

$scope.changedate=function()
  console.log($scope.startdate);

有什么想法吗?

【问题讨论】:

我认为它应该可以工作,plnkr.co/edit/QbtoD2ND46ceoDOXes9x?p=preview,点击第一个日期选择器并检查控制台输出 【参考方案1】:

您可以留意$scope 何时更改。

类似这样的:

$scope.startdate;

$scope.$watch("startdate", function(newValue, oldValue) 
    console.log("I've changed : ", startdate);
);

【讨论】:

【参考方案2】:

简单的解决方案:尝试传递值:

html

ng-change="selectDate(dt)"

javascript

$scope.selectDate = function(dt) 
  console.log(dt);

【讨论】:

【参考方案3】:

我以前这样做的方法是将 datepicker jQuery 的东西包装在一个角度指令中。这很粗略,但想法是这样的:

app.directive('dateDirective', function() 
    return 
        restrict: 'A',
        scope: 
            onChange: '&'
        ,
        link: function(scope, element, attrs) 
          element.datetimepicker(
            format: "MM-yyyy"
            //all your options here
          ).on('changeDate', function(e) 
            scope.$apply(function(scope) 
              scope.onChange(e.date);
            );
          );
        
    ;
);

您可以从 jQuery 元素中捕获更改事件并使用它来调用控制器中的函数,或者仅使用它来设置范围值或其他任何东西:

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

app.controller('myAppCtrl', function($scope) 
  $scope.current = '';
  $scope.changedate = function(date)
    $scope.current = date;
  ;
);

然后你只需要将指令添加到你的 dom 元素:

<input date-directive
                   type="text" 
                   starting-day="2" 
                   show-button-bar="false" 
                   show-weeks="false" 
                   class="form-control addTicketDateInput" 
                   datepicker-popup="dd MMM" 
                   ng-model="startdate" 
                   is-open="openstart"                         
                   datepicker-options="dateOptions"           
                   ng-required="true"
                   close-text="Close" />

然后告诉它调用哪个作用域函数:

<input date-directive onChange='changedate(date)'
                   type="text" 
                   starting-day="2" 
                   show-button-bar="false" 
                   show-weeks="false" 
                   class="form-control addTicketDateInput" 
                   datepicker-popup="dd MMM" 
                   ng-model="startdate" 
                   is-open="openstart"                         
                   datepicker-options="dateOptions"           
                   ng-required="true"
                   close-text="Close" />

就像我说的那样,这很粗糙,只是快速回忆了一下。如果这没有帮助,我会挖出一个经过测试的样本。

希望有帮助!

另外,这里有一个 datepicker 指令可能是 halpful:

https://angular-ui.github.io/bootstrap/

【讨论】:

【参考方案4】:

Angular 中的简单解决方案

(bsValueChange)="Function($event)"

【讨论】:

以上是关于如何捕捉引导日期选择器更改事件?的主要内容,如果未能解决你的问题,请参考以下文章

在引导日期选择器更改月份事件不起作用

更改时引导日期选择器

引导日期选择器从另一个日期选择器更改 minDate/startDate

如何更改引导内联日期选择器以适应全宽

选择后引导日期选择器返回焦点

如何在引导日期选择器中更改日期格式(dd-mmm-yyyy)