【问题标题】:Date-Time-Range directive field is not showing any values日期时间范围指令字段未显示任何值
【发布时间】:2015-02-20 09:48:44
【问题描述】:

我在 AngularJS 中创建了一个日期时间范围指令。我正在使用 dangrossman/bootstrap-daterangepicker 插件来获取日期时间范围日历。该指令工作正常,模型值正在更改,但视图没有更新。

      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>

【问题讨论】:

    标签: javascript angularjs twitter-bootstrap datetimepicker angular-directive


    【解决方案1】:
    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 的代码 sn-p 负责更新视图。

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

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

    【讨论】:

    • 还有一个帮助...你能告诉我为什么日期图标没有出现在那个文本字段中
    • 检查这个demo那里的图标是正确的
    • 日历图标是从 font-awesome 加载的。 将其包含在您的 html 文件中。
    • 嘿,有一个问题,比如当我选择从和到日期为02/02/2015 12:00 AM - 02/03/2015 11:59 PM 时,模型值显示{"start":"2015-02-02T06:00:00.000Z","end":"2015-02-04T05:59:59.000Z"} 。而不是2015-02-03 它显示2015-02-04 结束日期
    • 问题在于包含日期的 json 对象的序列化。在对其进行序列化时,它考虑了一个不同的时区。 JSON.stringify({"date": new Date()}) "{"date":"2015-02-23T09:12:54.023Z"}"new Date() Mon Feb 23 2015 14:43:24 GMT+0530 (India Standard Time)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多