如何捕获bootstrap datepicker更改事件?

时间:2015-04-07 17:23:56

标签: angularjs bootstrap-datepicker

现在我在用户更改日期后尝试做某事。但似乎忽略了我的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);
}

有什么想法吗?

4 个答案:

答案 0 :(得分:17)

您可以留意$scope更改的时间。

这样的事情:

$scope.startdate;

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

答案 1 :(得分:7)

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

HTML

ng-change="selectDate(dt)"

JS

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

我希望这能解决你的问题!

答案 2 :(得分:3)

我之前完成此操作的方法是将datepicker jQuery内容包装在angular指令中。这很粗糙但是这里的想法是:

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指令,可能是有点的:

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

答案 3 :(得分:0)

简单的角度解决方案

(bsValueChange)="Function($event)"