一尘不染

将datetimepicker连接到angularjs

angularjs

我需要使用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";

}]);

如何解决?建立联系?


阅读 272

收藏
2020-07-04

共1个答案

一尘不染

因此,问题是:

  1. 改变ng_modelng-modeldiv id=date元件;
  2. ng_modelinput元素中删除并实现ngModelCtrl.$render功能,以将模型更改呈现给元素
  3. 根据组件文档

唯一公开的事件是“ 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

一些其他提示:

  1. 如前所述,删除内部ng-model并实施ngModelCtrl.$render以处理模型更改
  2. 使用template属性以封装组件的内部元素

一个使用$ render的非常简单的示例:

var picker = element.data('datetimepicker');

ngModelCtrl.$render = function() {
  if (ngModelCtrl.$modelValue) {
    picker.setLocalDate(ngModelCtrl.$modelValue);
  } else {
    picker.setLocalDate(null);
  }
}
2020-07-04