javascript - 日期时间范围指令字段未显示任何值

标签 javascript angularjs twitter-bootstrap datetimepicker angular-directive

我在 AngularJS 中创建了一个日期时间范围指令。我正在使用 dangrossman/bootstrap-daterangepicker 用于获取日期时间范围日历的插件。该指令工作正常,模型值也发生了变化,但 View 没有更新。

      element.data('daterangepicker').setStartDate(val.start); 
      element.data('daterangepicker').setEndDate(val.end); 

任何人都可以告诉我一些解决方案吗?

下面给出了我创建的指令

<强> Plunker

脚本

app.directive('dateTimePicker', function($parse, $compile) {
  return {
    restrict: "E",
    replace: true,
    transclude: false,
    compile: function(element, attrs) {
      var modelAccessor = $parse(attrs.ngModel);

      var html = "<form>" +
        "<div class='form-group'>" +
        "<div class='input-group'>" +
        "<span class='input-group-addon'>" +
        "<i class='fa fa-calendar'></i>" +
        "</span>" +
        "<input type='text' name='reservation' id='reservationtime' class='form-control' value=''/>" +
        "</div>" +
        "</div>" +
        "</form>";

      var newElem = $(html); 

      element.replaceWith(newElem); 

      return function(scope, element, attrs, controller) {

        element.on('apply.daterangepicker', function(ev, picker) 
        {
          var date = {};

          date.start = picker.startDate;
          date.end = picker.endDate;
          scope.$apply(function (scope) {
              modelAccessor.assign(scope, date); 
           });
        });  

        element.daterangepicker({
          timePicker: true,
          timePickerIncrement: 30,
          format: 'MM/DD/YYYY h:mm A'
        });

        scope.$watch(modelAccessor, function(val) 
        {
          console.log(val);
          if(!_.isUndefined(val))
          {
            element.data('daterangepicker').setStartDate(val.start); 
            element.data('daterangepicker').setEndDate(val.end); 
          }
        });  

      };

    }
  };
});

html

  <date-time-picker ng-model="dateTimeRange"></date-time-picker>

最佳答案

updateInputText: function() {
            if (this.element.is('input') && !this.singleDatePicker) {
                this.element.val(this.startDate.format(this.format) + this.separator + this.endDate.format(this.format));
            } else if (this.element.is('input')) {
                this.element.val(this.endDate.format(this.format));
            }
        }

来自 daterangepicker.js 的这段代码负责更新 View 。

在 dateTimePicker 指令中,模板的根元素(即表单元素)使用 element.daterangepicker 转换为日期范围小部件,其中应转换模板内的输入元素。

element.find('input').daterangepicker({}) 为我工作。

关于javascript - 日期时间范围指令字段未显示任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28625938/

相关文章:

javascript - 通过 ng-init 将变量注入(inject)到 Controller

javascript - Angular Directive(指令)不会出现在 View 中,但出现在控制台中

angularjs - Angular Js+ typescript : How to create a Dynamic table

javascript - JQuery 选择器未选择任何内容。

html - 相同高度的图像 Bootstrap

javascript - Javascript 或 jQuery 中的脚本或插件的生命周期

javascript - 如何在 javascript 中使用正则表达式匹配并返回零?

javascript - 如何使用 Cognito 身份池和 Amplify 连接到 AWS AppSync

javascript - CORS XMLHttpRequest 在 IE10-11 web worker 中失败

html - 如何使用 bootstrap 4 垂直对齐按钮内容