Как поймать событие изменения bootstrap datepicker?
сейчас я пытаюсь сделать что-то после смены даты. но, похоже, мое ng-изменение игнорируется. Вот мой пример кода:
<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" />
in my controller:
$scope.changedate=function(){
console.log($scope.startdate);
}
есть идеи?
3 ответов
вы смогли держать глаз на когда $scope
изменен.
что-то вроде этого:
$scope.startdate;
$scope.$watch("startdate", function(newValue, oldValue) {
console.log("I've changed : ", startdate);
});
то, как я делал это раньше, - это обернуть материал jQuery datepicker в угловую директиву. Это грубо, но вот идея:
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:
простое решение: попробуйте передать значение
HTML-код
ng-change="selectDate(dt)"
js
$scope.selectDate = function(dt) {
console.log(dt);
}
Я надеюсь, что это решит вашу проблему!