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?
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);
});
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!
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: