I need to create one input field with date and time using angular + bootstrap. I found this datetime picker it looks excatly i need - date and time in one field, and blocking user wrong editions. I writed a directive, datepickers started, but it changes the view and the model doesn't changes... I also tried onSelect, but nothing happens too
<div class="container container-fluid" ng-controller="Ctrl1">
2+2={{2+2}}, var1={{var1}}
<form class="form-horizontal" novalidate name="form" ng-submit="submit()">
<div class="well">
<div id="date" class="input-append" datetimez ng_model="var1">
<input data-format="MM/dd/yyyy HH:mm:ss PP" type="text" id="input1" name="input1" ng_model="var1"></input>
<span class="add-on">
<i data-time-icon="icon-time" data-date-icon="icon-calendar">
</i>
</span>
</div>
</div>
</form>
</div>
js
var project = angular.module('project',['ui.bootstrap']);
project.directive('datetimez', function() {
return {
restrict: 'A',
require : 'ngModel',
link: function(scope, element, attrs, ngModelCtrl) {
$(function(){
element.datetimepicker({
dateFormat:'dd/MM/yyyy hh:mm:ss',
language: 'pt-BR',
onSelect:function (date) {
//alert('zz');
ngModelCtrl.$setViewValue(date);
scope.$apply();
}
});
});
}
};
});
project.controller('Ctrl1', ['$scope', '$rootScope', function(scope, rootScope){
scope.var1="123";
}]);
How to fix it? to make connection?
So, the problems are:
ng_model
per ng-model
in the div id=date
element;ng_model
from the input
element and implement ngModelCtrl.$render
function in order to render model changes to the elementThe only event exposed is ‘changeDate’, which will expose ‘date’ and ‘localDate’ properties on the event object
So you need to handle the change event other ways, look:
element.datetimepicker({
dateFormat:'dd/MM/yyyy hh:mm:ss',
language: 'pt-BR'
}).on('changeDate', function(e) {
ngModelCtrl.$setViewValue(e.date);
scope.$apply();
});
Here is a working Plnkr.
Some additional tips:
ng-model
and implement ngModelCtrl.$render
to handle model changestemplate
property in order to encapsulate the internal elements of the componentA pretty simple example of using $render:
var picker = element.data('datetimepicker');
ngModelCtrl.$render = function() {
if (ngModelCtrl.$modelValue) {
picker.setLocalDate(ngModelCtrl.$modelValue);
} else {
picker.setLocalDate(null);
}
}
Late answer, but you could always use this one
Bootstrap-ui/datetime-picker it uses the datepicker and timepicker from bootstrap-ui without using jquery or moment.js
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With