我需要使用angular + bootstrap创建一个带有日期和时间的输入字段。我发现这个日期时间选择器看起来确实很需要我- 日期和时间在一个字段中,并且阻止了用户错误的版本。我写了一条指令,启动了datepickers,但是它改变了视图,并且模型没有改变……我也尝试了onSelect,但是也没有任何反应
<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"; }]);
如何解决?建立联系?
因此,问题是:
ng_model
ng-model
div id=date
input
ngModelCtrl.$render
唯一公开的事件是“ changeDate”,它将在事件对象上公开“ date”和“ localDate”属性
因此,您需要以其他方式处理变更事件,请看:
element.datetimepicker({ dateFormat:'dd/MM/yyyy hh:mm:ss', language: 'pt-BR' }).on('changeDate', function(e) { ngModelCtrl.$setViewValue(e.date); scope.$apply(); });
这是工作中的Plnkr。
一些其他提示:
template
一个使用$ render的非常简单的示例:
var picker = element.data('datetimepicker'); ngModelCtrl.$render = function() { if (ngModelCtrl.$modelValue) { picker.setLocalDate(ngModelCtrl.$modelValue); } else { picker.setLocalDate(null); } }