web-dev-qa-db-fra.com

Comment intercepter l'événement bootstrap datepicker change?

Maintenant j'essaye de faire quelque chose après que l'utilisateur ait changé la date. Mais il semble que mon ng-change est ignoré.

Voici mon exemple de code:

 <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" />

Dans mon contrôleur:

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

Une idée?

17
linyuanxie

Vous pouvez garder un œil sur le moment où le $scope modifié.

Quelque chose comme ça:

$scope.startdate;

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

Solution simple: essayez de transmettre la valeur

html

ng-change="selectDate(dt)"

js

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

J'espère que cela résout votre problème!

8
Ashwin

La façon dont je l'ai fait auparavant est d'envelopper le truc jQuery de datepicker dans une directive angular. C'est rugueux mais voici l'idée:

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);
            });
          });
        }
    };
});

Vous pouvez capturer l'événement change à partir de l'élément jQuery et l'utiliser pour appeler une fonction dans votre contrôleur, ou simplement l'utiliser pour définir des valeurs de portée ou autre:

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

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

Ensuite, il vous suffit d'ajouter la directive à votre élément 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" />

Dites-lui ensuite quelle fonction de portée appeler:

<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" />

Comme je l'ai dit, c'est rude, je l'ai rappelé rapidement. Si cela n'aide pas, je vais creuser un échantillon qui est testé.

J'espère que cela pourra aider!

aussi, il y a une directive datepicker ici qui pourrait être halpful:

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

3
Chris