【问题标题】: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);
}

有什么想法吗?

【问题讨论】:

标签: angularjs bootstrap-datepicker


【解决方案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)"
        

        【讨论】:

          猜你喜欢
          • 2019-08-23
          • 1970-01-01
          • 1970-01-01
          • 2011-09-30
          • 2018-10-09
          • 2013-11-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多